الانتقال إلى المحتوى الرئيسي
الالتقاط على Android

افتح الالتقاط في Custom Tab وأعد الشخص إلى تطبيقك.

Markdown

تنشئ الواجهة الخلفية لديك العملية في Human Plugin بتدفق Journey وcallbackUri يستخدم مخطط URL الخاص بتطبيقك. يفتح التطبيق link الموجود في الاستجابة داخل Custom Tab. وعند انتهاء الالتقاط، يفتح المتصفح مخططك ويستلم التطبيق التحكم.

احتفظ بمعرّف Human Plugin id من استجابة الإنشاء. فالواجهة الخلفية لديك تقرأ النتيجة به.

المتطلبات الأساسية​

  • Android 8 (API 26) أو أحدث
  • androidx.browser:browser:1.5.0
  • مخطط URL فريد لتطبيقك، مثل myapp

1. أضف الاعتمادية​

في build.gradle:

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

2. أنشئ العملية بمخططك​

ترسل الواجهة الخلفية لديك المخطط في callbackUri:

{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}

ثم تعيد id وlink إلى التطبيق.

3. أنشئ النشاط (Activity)​

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") {
// The capture ended. Ask your back-end to read the outcome
// with GET /v1/processes/{id}, using the 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. سجّل المخطط في AndroidManifest.xml​

<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 نظام Android يسلّم العودة إلى onNewIntent() في النشاط نفسه.

5. ابدأ الالتقاط​

val intent = Intent(this, CaptureActivity::class.java)
.putExtra(CaptureActivity.EXTRA_PROCESS_ID, id)
.putExtra(CaptureActivity.EXTRA_LINK, link)
startActivity(intent)

الملخص​

الملفالغرض
build.gradleاعتمادية androidx.browser
CaptureActivity.ktيفتح Custom Tab ويعالج العودة
AndroidManifest.xmlمرشّح Intent لمخططك

استخدام WebView​

تحذير

فضّل Custom Tabs. استخدم WebView فقط إذا لم يكن Custom Tabs خياراً متاحاً.

يحتاج الالتقاط إلى JavaScript وتخزين DOM والتشغيل التلقائي للوسائط وصلاحيتي الكاميرا والموقع:

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

صرّح بالصلاحيات في AndroidManifest.xml واطلب صلاحيتي الكاميرا والموقع وقت التشغيل قبل تحميل link:

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

في WebView، افتح link مباشرة. لا تحمّل Journeys SDK بداخله.