Aller au contenu principal
Android

Intégrez le parcours Human Token dans votre application Android avec Custom Tabs.

Markdown

Custom Tabs lance le parcours Human Token dans un onglet de navigateur au sein de votre application. Lorsque le parcours est terminé, le navigateur redirige vers votre schéma d'URL personnalisé et votre application l'intercepte.

Prérequis​

  • Android 8 (API 26) ou ultérieur
  • androidx.browser:browser:1.5.0
  • Un schéma d'URL unique pour votre application (par ex. myapp)

Étape 1 : Ajouter la dépendance​

Dans votre build.gradle :

implementation("androidx.browser:browser:1.5.0")

Étape 2 : Définir votre schéma d'URL​

Choisissez un schéma unique (par ex. myapp). Il est utilisé comme callbackUri lors de la création du processus :

callbackUri: myapp://callback

Étape 3 : Créer l'activité​

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"
}
}

Étape 4 : Configurer 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 garantit qu'Android appelle onNewIntent() sur l'activité existante au lieu d'en créer une nouvelle.

Étape 5 : Lancer le parcours​

val intent = Intent(this, HumanTokenActivity::class.java)
.putExtra(HumanTokenActivity.EXTRA_PROCESS_URL, processLink)
startActivity(intent)

Résumé des fichiers​

FichierObjectif
build.gradleDépendance androidx.browser
HumanTokenActivity.ktLancement Custom Tabs + gestion de la redirection
AndroidManifest.xmlFiltre d'intent pour votre schéma d'URL

Utiliser une WebView au lieu de Custom Tabs​

avertissement

Custom Tabs est l'approche recommandée. C'est plus sécurisé, gère les redirections nativement et nécessite moins de configuration. N'utilisez une WebView que si Custom Tabs n'est pas une option dans votre projet.

Si vous devez utiliser une WebView, la journey nécessite que JavaScript, le stockage DOM, la lecture automatique des médias et les permissions de caméra/géolocalisation soient accordés explicitement. Sans ces paramètres, le cadre de capture ne se chargera pas ou la caméra ne s'activera pas.

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)
}
}

Vous devez également déclarer les permissions CAMERA, INTERNET et ACCESS_FINE_LOCATION dans votre AndroidManifest.xml et demander les permissions de caméra et de localisation au moment de l'exécution avant de charger l'URL du parcours.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />