Redirecionar Usuário
Este artigo explica como redirecionar um usuário para a experiência do ByUnico de autenticação através da API REST.
O campo userRedirectUrl é usado para direcionar o usuário. Esse campo é recebido na resposta de sucesso da criação do processo.
- Web
- Android
- iOS
Para fazer a integração com sua aplicação web existem duas opções:
1) Usando window.open()
A opção window.open()
consiste em abrir uma nova aba do navegador do usuário para que ele possa completar o processo. Ao final essa aba é fechada e redirecionada para sua aplicação.
Para isso é recomendado:
Seguir a documentação pública sobre isso, que se encontra aqui;
Monitorar se houve alteração de URL (para a redirectUrl) e então fechar a aba utilizando
window.close()
;
2) Usando redirect
Recomenda-se seguir os seguintes passos:
- Em seu fluxo comum (que está inserido o Cadastro by Unico) você irá redirecionar o cliente para o link gerado através da API;
- Após isso o cliente de dentro da plataforma realiza os procedimentos necessários para continuar o fluxo;
- Quando concluído, ele é redirecionado para a sua página (utilizando o redirectUrl passado na criação do processo);
A aplicação não funciona Via iFrame por questões de segurança.
Passo 1: Usando CustomTabs para integração
Insira no app/build.gradle
a dependência necessária para o uso de CustomTabs:
implementation("androidx.browser:browser:1.5.0")
Passo 2: Abrindo uma CustomTab
import android.net.Uri
import androidx.activity.ComponentActivity
import androidx.browser.customtabs.CustomTabsClient
import androidx.browser.customtabs.CustomTabsIntent
class CustomTabActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
openCustomTab(<URL_CBU>)
}
fun openCustomTab(url: String) {
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(this, Uri.parse(url))
}
}
Passo 3: Modificando AndroidManifest
Coloque no AndroidManifest.xml as permissões e intents necessários na Activity que deseja receber a callback_uri
É necessário incluir o atributo android:launchMode="singleTop"
como também a tag <data>
informando os dados da URI.
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-permission android:name="android.permission.CAMERA"/>
<activity
android:name=".CustomTabActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.Customtabs"
android:launchMode="singleTop">
<intent-filter android:label="Custom Tab">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- scheme e host são os dados fornecidos na criação de um processo no campo callback_uri
callback_uri: "foobar://success?code=1234" -->
<data android:scheme="foobar" android:host="success"/>
</intent-filter>
</activity>
As seguintes permissões são necessárias para funcionar corretamente:
- Câmera;
- Geolocalização;
Passo 4: Pegando informações de retorno
Para pegar as informações de redirect com os dados fornecidos, você pode usar o seguinte código no método onNewIntent
da sua Activity:
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val url = intent.data
val scheme = url.scheme // "foobar"
val host = url.host // "success"
val code = url.getQueryParameter("code") // "1234"
}
Passo 1: Criar o controlador de autenticação
O primeiro passo é criar o controlador de autenticação, e, para isso crie uma classe chamada UnicoAuthenticationController
(ou como preferir chamar).
Na sequência, importe o framework AuthenticationServices
no topo da classe.
Declare a classe como NSObject e implemente o protocolo ASWebAuthenticationPresentationContextProviding
.
O resultado deve ser:
import AuthenticationServices
class UnicoAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
if let mainWindow = windowScene.windows.first {
return mainWindow
}
}
return ASPresentationAnchor()
}
}
Passo 2: Implementar a autenticação
Abra o arquivo onde você executa a autenticação e adicione as importações necessárias (como exemplo, o ContentView.swift é usado).
import SwiftUI
import AuthenticationServices
Para controlar o estado do fluxo é preciso criar a propriedade @State
.
@State private var finished = false
Crie uma instância da classe UnicoAuthenticationController
fora do corpo da estrutura ContentView.
let unicoController = UnicoAuthenticationController()
Para a validação do processo, crie uma função chamada redirectUser
.
func redirectUser() {
guard let url = URL(string: "URL_AUTHENTICATION") else { return }
var session: ASWebAuthenticationSession?
session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
guard callbackURL != nil else {
if let error = error {
return print("Erro durante o processo: \(error.localizedDescription)")
}
return
}
// Processa o URL de callback para verificar se o processo foi finalizado
session?.cancel()
finished = true
}
session?.presentationContextProvider = unicoController
session?.prefersEphemeralWebBrowserSession = true
session?.start()
}
Lembre-se de alterar a url URL_AUTHENTICATION
para a URL de autenticação recebida em seu processo e também o callbackURLScheme BUNDLE
para o redirect informado na criação do processo (o uso do Bundle Identifier de seu aplicativo é recomendado).
É importante setar prefersEphemeralWebBrowserSession
para true para garantir uma autenticação única por processo.
Dúvidas?
Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da Central de Ajuda.