Lewati ke konten utama
Pengambilan di Android

Buka pengambilan di Custom Tab dan bawa orang tersebut kembali ke aplikasi Anda.

Markdown

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​

FileFungsi
build.gradleDependensi androidx.browser
CaptureActivity.ktMembuka Custom Tab dan menangani kembalinya pengguna
AndroidManifest.xmlIntent filter untuk scheme Anda

Menggunakan WebView​

peringatan

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.