Zum Hauptinhalt springen
Android-Capture

Öffnen Sie die Aufnahme in einem Custom Tab und bringen Sie die Person zurück in Ihre App.

Markdown

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​

DateiZweck
build.gradleAbhängigkeit androidx.browser
CaptureActivity.ktÖffnet den Custom Tab und verarbeitet die Rückkehr
AndroidManifest.xmlIntent-Filter für Ihr Schema

Eine WebView verwenden​

Warnung

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.