Integre a jornada Human Token no seu aplicativo Android usando Custom Tabs.
Custom Tabs iniciam a jornada Human Token em uma aba do navegador dentro do seu aplicativo. Quando a jornada termina, o navegador redireciona para o seu esquema de URL personalizado e o seu aplicativo o intercepta.
O SDK Lite Android abre a captura de forma nativa com o webAppToken e é o caminho preferencial no Android. Use esta página, que abre o link da jornada, quando o SDK Lite não servir para o seu app.
Pré-requisitos
- Android 8 (API 26) ou posterior
androidx.browser:browser:1.5.0- Um esquema de URL exclusivo para o seu aplicativo (ex.:
myapp)
Passo 1: Adicionar a dependência
No seu build.gradle:
implementation("androidx.browser:browser:1.5.0")
Passo 2: Definir o esquema de URL
Escolha um esquema exclusivo (ex.: myapp). Ele é usado como callbackUri ao criar o processo:
callbackUri: myapp://callback
Passo 3: Criar a activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabsIntent
class HumanTokenActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val url = intent.getStringExtra(EXTRA_PROCESS_URL) ?: return finish()
CustomTabsIntent.Builder()
.build()
.launchUrl(this, Uri.parse(url))
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intent.data?.let { uri ->
if (uri.scheme == "myapp") {
// Journey completed — send processId to your backend
val processId = uri.getQueryParameter("id")
handleResult(processId)
}
}
}
private fun handleResult(processId: String?) {
// Fetch the result from your backend via Get Process
finish()
}
companion object {
const val EXTRA_PROCESS_URL = "process_url"
}
}
Passo 4: Configurar AndroidManifest.xml
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<activity
android:name=".HumanTokenActivity"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" android:host="callback" />
</intent-filter>
</activity>
singleTop garante que o Android chame onNewIntent() na activity existente em vez de criar uma nova.
Passo 5: Iniciar a jornada
val intent = Intent(this, HumanTokenActivity::class.java)
.putExtra(HumanTokenActivity.EXTRA_PROCESS_URL, processLink)
startActivity(intent)
Resumo dos arquivos
| Arquivo | Finalidade |
|---|---|
build.gradle | Dependência androidx.browser |
HumanTokenActivity.kt | Lançamento do Custom Tabs + tratamento de redirecionamento |
AndroidManifest.xml | Filtro de intent para o seu esquema de URL |
Usando um WebView em vez de Custom Tabs
Custom Tabs é a abordagem recomendada. É mais seguro, lida com redirecionamentos nativamente e requer menos configuração. Use um WebView somente se Custom Tabs não for uma opção no seu projeto.
Se você precisar usar um WebView, a journey requer que JavaScript, armazenamento DOM, reprodução automática de mídia e permissões de câmera/geolocalização sejam concedidos explicitamente. Sem essas configurações, o quadro de captura não será carregado ou a câmera não será ativada.
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.mediaPlaybackRequiresUserGesture = false
webView.settings.setGeolocationEnabled(true)
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
if (PermissionRequest.RESOURCE_VIDEO_CAPTURE in request.resources) {
request.grant(arrayOf(PermissionRequest.RESOURCE_VIDEO_CAPTURE))
} else {
request.deny()
}
}
override fun onGeolocationPermissionsShowPrompt(
origin: String,
callback: GeolocationPermissions.Callback
) {
callback.invoke(origin, true, false)
}
}
Você também deve declarar as permissões CAMERA, INTERNET e ACCESS_FINE_LOCATION no seu AndroidManifest.xml e solicitar as permissões de câmera e localização em tempo de execução antes de carregar a URL da jornada.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />