Öffnen Sie die Aufnahme in einem Custom Tab und bringen Sie die Person zurück in Ihre App.
Ihr Back-End erstellt den Prozess in Human Plugin mit einem Journey-Flow und einer callbackUri, die das URL-Schema Ihrer App verwendet. Die App öffnet den link aus der Antwort in einem Custom Tab. Wenn die Aufnahme endet, öffnet der Browser Ihr Schema und die App übernimmt.
Bewahren Sie die Human-Plugin-id aus der Antwort auf das Erstellen auf. Ihr Back-End liest damit das Ergebnis.
Voraussetzungen
- Android 8 (API 26) oder neuer
androidx.browser:browser:1.5.0- Ein für Ihre App eindeutiges URL-Schema, etwa
myapp
1. Abhängigkeit hinzufügen
In build.gradle:
implementation("androidx.browser:browser:1.5.0")
2. Den Prozess mit Ihrem Schema erstellen
Ihr Back-End sendet das Schema als callbackUri:
{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}
und gibt id und link an die App zurück.
3. Die 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 CaptureActivity : AppCompatActivity() {
private var processId: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
processId = intent.getStringExtra(EXTRA_PROCESS_ID)
val link = intent.getStringExtra(EXTRA_LINK) ?: return finish()
CustomTabsIntent.Builder()
.build()
.launchUrl(this, Uri.parse(link))
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
if (intent.data?.scheme == "myapp") {
// Die Aufnahme ist beendet. Bitten Sie Ihr Back-End, das Ergebnis
// mit GET /v1/processes/{id} auszulesen, mit der Human-Plugin-id.
onCaptureEnded(processId)
}
}
private fun onCaptureEnded(processId: String?) {
finish()
}
companion object {
const val EXTRA_PROCESS_ID = "process_id"
const val EXTRA_LINK = "link"
}
}
4. Das Schema in AndroidManifest.xml registrieren
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<activity
android:name=".CaptureActivity"
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 sorgt dafür, dass Android die Rückkehr an onNewIntent() derselben Activity übergibt.
5. Die Aufnahme starten
val intent = Intent(this, CaptureActivity::class.java)
.putExtra(CaptureActivity.EXTRA_PROCESS_ID, id)
.putExtra(CaptureActivity.EXTRA_LINK, link)
startActivity(intent)
Zusammenfassung
| Datei | Zweck |
|---|---|
build.gradle | Abhängigkeit androidx.browser |
CaptureActivity.kt | Öffnet den Custom Tab und verarbeitet die Rückkehr |
AndroidManifest.xml | Intent-Filter für Ihr Schema |
Eine WebView verwenden
Bevorzugen Sie Custom Tabs. Verwenden Sie eine WebView nur, wenn Custom Tabs keine Option sind.
Die Aufnahme benötigt JavaScript, DOM Storage, automatische Medienwiedergabe sowie die Berechtigungen für Kamera und Standort:
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)
}
}
Deklarieren Sie die Berechtigungen in AndroidManifest.xml und fordern Sie Kamera und Standort zur Laufzeit an, bevor Sie den link laden:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Öffnen Sie in einer WebView den link direkt. Laden Sie das Journeys SDK nicht darin.