Pular para o conteúdo principal
Android

Integre a jornada Human Token no seu aplicativo Android usando Custom Tabs.

Markdown

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.

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​

ArquivoFinalidade
build.gradleDependência androidx.browser
HumanTokenActivity.ktLançamento do Custom Tabs + tratamento de redirecionamento
AndroidManifest.xmlFiltro de intent para o seu esquema de URL