Buka pengambilan di Custom Tab dan bawa orang tersebut kembali ke aplikasi Anda.
Back-end Anda membuat proses di Human Plugin dengan flow Journey dan callbackUri yang menggunakan URL scheme aplikasi Anda. Aplikasi membuka link dari respons di Custom Tab. Saat pengambilan selesai, browser membuka scheme Anda dan aplikasi mengambil alih.
Simpan id Human Plugin dari respons pembuatan. Back-end Anda membaca hasilnya dengan id tersebut.
Prasyarat
- Android 8 (API 26) atau lebih baru
androidx.browser:browser:1.5.0- URL scheme yang unik untuk aplikasi Anda, seperti
myapp
1. Tambahkan dependensi
Di build.gradle:
implementation("androidx.browser:browser:1.5.0")
2. Buat proses dengan scheme Anda
Back-end Anda mengirim scheme sebagai callbackUri:
{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}
lalu mengembalikan id dan link ke aplikasi.
3. Buat 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") {
// Pengambilan selesai. Minta back-end Anda membaca hasilnya
// dengan GET /v1/processes/{id}, menggunakan id Human Plugin.
onCaptureEnded(processId)
}
}
private fun onCaptureEnded(processId: String?) {
finish()
}
companion object {
const val EXTRA_PROCESS_ID = "process_id"
const val EXTRA_LINK = "link"
}
}
4. Daftarkan scheme di 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 membuat Android mengirim kembalinya pengguna ke onNewIntent() pada activity yang sama.
5. Mulai pengambilan
val intent = Intent(this, CaptureActivity::class.java)
.putExtra(CaptureActivity.EXTRA_PROCESS_ID, id)
.putExtra(CaptureActivity.EXTRA_LINK, link)
startActivity(intent)
Ringkasan
| File | Fungsi |
|---|---|
build.gradle | Dependensi androidx.browser |
CaptureActivity.kt | Membuka Custom Tab dan menangani kembalinya pengguna |
AndroidManifest.xml | Intent filter untuk scheme Anda |
Menggunakan WebView
Utamakan Custom Tabs. Gunakan WebView hanya jika Custom Tabs bukan pilihan.
Pengambilan memerlukan JavaScript, DOM storage, autoplay media, serta izin kamera dan lokasi:
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)
}
}
Deklarasikan izin di AndroidManifest.xml dan minta izin kamera serta lokasi saat runtime sebelum memuat link:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Di WebView, buka link secara langsung. Jangan memuat Journeys SDK di dalamnya.