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

Custom Tabs का उपयोग करके अपने Android ऐप में Human Token Journey को एकीकृत करें।

Markdown

Custom Tabs आपके ऐप के अंदर एक ब्राउज़र टैब में Human Token Journey लॉन्च करता है। जब यात्रा पूरी होती है, तो ब्राउज़र आपके कस्टम URL स्कीम पर रीडायरेक्ट करता है और आपका ऐप इसे इंटरसेप्ट करता है।

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

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

चरण 1: डिपेंडेंसी जोड़ें​

अपनी build.gradle में:

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

चरण 2: अपना URL स्कीम परिभाषित करें​

एक अद्वितीय स्कीम चुनें (जैसे myapp)। प्रोसेस बनाते समय इसे callbackUri के रूप में उपयोग किया जाता है:

callbackUri: myapp://callback

चरण 3: एक्टिविटी बनाएँ​

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

चरण 4: AndroidManifest.xml कॉन्फ़िगर करें​

<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 सुनिश्चित करता है कि Android नई एक्टिविटी बनाने के बजाय मौजूदा एक्टिविटी पर onNewIntent() कॉल करे।

चरण 5: यात्रा शुरू करें​

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

फ़ाइल सारांश​

फ़ाइलउद्देश्य
build.gradleandroidx.browser डिपेंडेंसी
HumanTokenActivity.ktCustom Tabs लॉन्च + रीडायरेक्ट हैंडलिंग
AndroidManifest.xmlआपके URL स्कीम के लिए Intent फ़िल्टर

Custom Tabs के बजाय WebView का उपयोग​

चेतावनी

Custom Tabs अनुशंसित दृष्टिकोण है। यह अधिक सुरक्षित है, रीडायरेक्ट को मूल रूप से संभालता है, और कम कॉन्फ़िगरेशन की आवश्यकता होती है। WebView का उपयोग केवल तभी करें जब Custom Tabs आपके प्रोजेक्ट में विकल्प न हो।

यदि आपको WebView का उपयोग करना ही है, तो journey के लिए 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 में CAMERA, INTERNET और ACCESS_FINE_LOCATION अनुमतियाँ भी घोषित करनी होंगी और यात्रा URL लोड करने से पहले रनटाइम पर कैमरा और स्थान अनुमतियाँ अनुरोध करनी होंगी।

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