Untuk menerima dan menyimpan kredensial dari penerbit, aplikasi pemegang Anda harus menangani alur penerbitan. Dalam alur penerbitan, situs atau aplikasi penerbit mengirimkan penawaran kredensial ke aplikasi pemegang yang menjelaskan informasi yang diperlukan untuk menyediakan kredensial. Aplikasi pemegang menggunakan RegistryManager untuk mendaftarkan jenis kredensial yang akan ditangani ke Pengelola Kredensial. Hal ini memungkinkan aplikasi ditampilkan kepada dan dipilih oleh pengguna selama permintaan penerbitan untuk menerima kredensial.
Untuk mengetahui informasi selengkapnya tentang cara kerja kredensial dengan Holder API, baca konsep inti Holder API.
Kompatibilitas versi Android
Holder API didukung di Android 6 (level API 23) dan yang lebih tinggi.
Implementasi
Untuk menggunakan Holder API Pengelola Kredensial, tambahkan dependensi berikut ke skrip build modul aplikasi Anda:
Groovy
dependencies { // Use to implement credentials registrys implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04" }
Kotlin
dependencies { // Use to implement credentials registrys implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04") }
Membuat RegistryManager
Buat instance RegistryManager dan daftarkan permintaan RegisterCreationOptionsRequest dengannya.
val registryManager = RegistryManager.create(context)
try {
registryManager.registerCreationOptions(object :
RegisterCreationOptionsRequest(
creationOptions = buildIssuanceData(),
matcher = loadIssuanceMatcher(),
type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
id = "openid4vci",
) {}
)
} catch (e: Exception) {
Log.e(TAG, "Issuance registration failed.", e)
}
Pencocok adalah file biner WebAssembly (Wasm) yang akan menerima creationOptions yang ditetapkan selama pendaftaran dan penawaran kredensial yang dikirim oleh penerbit untuk menentukan entri yang ditampilkan di UI Pengelola Kredensial. Lihat
aplikasi dompet contoh open sourceuntuk mengetahui contoh pencocok.
Menangani permintaan penerbitan
Selanjutnya, dompet harus menangani saat opsi pembuatan kredensial dipilih oleh pengguna. Tentukan aktivitas yang memproses filter intent
androidx.credentials.registry.provider.action.CREATE_CREDENTIAL,
seperti yang ditunjukkan dalam dompet contoh.
Intent yang meluncurkan aktivitas berisi permintaan pembuatan dan asal panggilan, yang dapat Anda ekstrak dengan fungsi PendingIntentHandler.retrieveProviderCreateCredentialRequest. API menampilkan ProviderCreateCredentialRequest yang berisi semua informasi yang terkait dengan permintaan pembuatan. Ada dua komponen utama:
- Aplikasi yang membuat permintaan. Anda dapat mengambilnya dengan
getCallingAppInfo. - Permintaan dari aplikasi panggilan. Anda dapat mengambilnya dengan
getCallingRequest, yang menampilkanCreateCredentialRequest. Jika permintaan ditujukan untuk kredensial digital, permintaan tersebut adalah instanceCreateDigitalCredentialRequest, yang berisi JSON permintaan penerbitan dalam propertirequestJson. Anda dapat memprosesnya dengan kode contoh berikut:
val pendingIntentRequest =
PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
Log.i(TAG, "Got DC creation request: ${request.requestJson}")
processCreationRequest(request.requestJson)
}
Menampilkan respons pembuatan
Setelah dompet menyelesaikan langkah-langkah yang diperlukan untuk menyimpan kredensial, selesaikan aktivitas dengan respons kredensial:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
resultData,
CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()
Jika ada pengecualian, Anda dapat mengirimkan pengecualian kredensial dengan cara yang sama:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
resultData,
CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Untuk melihat contoh lengkap cara menampilkan respons kredensial dalam konteks, lihat aplikasi contoh.