Zum Hauptinhalt springen
Android

Integrieren Sie die Human Token Journey in Ihre Android-App mit Custom Tabs.

Markdown

Custom Tabs starten die Human Token Journey in einem Browser-Tab innerhalb Ihrer App. Wenn die Journey abgeschlossen ist, leitet der Browser zu Ihrem benutzerdefinierten URL-Schema weiter und Ihre App fängt es ab.

Voraussetzungen​

  • Android 8 (API 26) oder höher
  • androidx.browser:browser:1.5.0
  • Ein eindeutiges URL-Schema für Ihre App (z. B. myapp)

Schritt 1: Abhängigkeit hinzufügen​

In Ihrer build.gradle:

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

Schritt 2: URL-Schema definieren​

Wählen Sie ein eindeutiges Schema (z. B. myapp). Dies wird als callbackUri beim Erstellen des Prozesses verwendet:

callbackUri: myapp://callback

Schritt 3: Activity erstellen​

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

Schritt 4: AndroidManifest.xml konfigurieren​

<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 stellt sicher, dass Android onNewIntent() auf der bestehenden Activity aufruft, anstatt eine neue zu erstellen.

Schritt 5: Journey starten​

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

Dateiübersicht​

DateiZweck
build.gradleandroidx.browser-Abhängigkeit
HumanTokenActivity.ktCustom Tabs Start + Weiterleitungsbehandlung
AndroidManifest.xmlIntent-Filter für Ihr URL-Schema

WebView statt Custom Tabs verwenden​

Warnung

Custom Tabs ist der empfohlene Ansatz. Er ist sicherer, verarbeitet Weiterleitungen nativ und erfordert weniger Konfiguration. Verwenden Sie eine WebView nur, wenn Custom Tabs in Ihrem Projekt keine Option ist.

Wenn Sie eine WebView verwenden müssen, erfordert die Journey, dass JavaScript, DOM-Speicher, automatische Medienwiedergabe sowie Kamera-/Standortberechtigungen explizit gewährt werden. Ohne diese Einstellungen wird der Aufnahmerahmen nicht geladen oder die Kamera wird nicht aktiviert.

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

Sie müssen außerdem die Berechtigungen CAMERA, INTERNET und ACCESS_FINE_LOCATION in Ihrer AndroidManifest.xml deklarieren und die Kamera- und Standortberechtigungen zur Laufzeit anfordern, bevor Sie die Journey-URL laden.

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