मुख्य सामग्री पर जाएं
Android कैप्चर

कैप्चर को Custom Tab में खोलें और व्यक्ति को अपने ऐप में वापस लाएँ।

Markdown

आपका बैक-एंड Human Plugin में Journey flow और आपके ऐप के URL scheme वाले callbackUri के साथ प्रोसेस बनाता है। ऐप उत्तर के link को Custom Tab में खोलता है। कैप्चर समाप्त होने पर, ब्राउज़र आपका scheme खोलता है और ऐप नियंत्रण सँभाल लेता है।

create के उत्तर से Human Plugin का id सँभालकर रखें। आपका बैक-एंड उसी से नतीजा पढ़ता है।

पूर्वापेक्षाएँ​

  • Android 8 (API 26) या बाद का
  • androidx.browser:browser:1.5.0
  • आपके ऐप के लिए अद्वितीय URL scheme, जैसे myapp

1. डिपेंडेंसी जोड़ें​

build.gradle में:

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

2. अपने scheme के साथ प्रोसेस बनाएँ​

आपका बैक-एंड scheme को callbackUri के रूप में भेजता है:

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

और ऐप को id तथा link लौटाता है।

3. एक्टिविटी बनाएँ​

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") {
// कैप्चर समाप्त हुआ। अपने बैक-एंड से कहें कि Human Plugin के id के साथ
// GET /v1/processes/{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 में scheme रजिस्टर करें​

<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.gradleandroidx.browser डिपेंडेंसी
CaptureActivity.ktCustom Tab खोलती है और वापसी सँभालती है
AndroidManifest.xmlआपके scheme के लिए intent filter

WebView का उपयोग​

चेतावनी

Custom Tabs को प्राथमिकता दें। WebView का उपयोग केवल तभी करें जब Custom Tabs विकल्प न हो।

कैप्चर को JavaScript, DOM storage, मीडिया autoplay और कैमरा तथा लोकेशन की अनुमतियाँ चाहिए:

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 लोड न करें।