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 ditanganinya ke Credential Manager. Hal ini memungkinkan aplikasi ditampilkan dan dipilih oleh pengguna selama permintaan penerbitan untuk menerima kredensial.
Untuk mengetahui informasi selengkapnya tentang cara kerja kredensial dengan Holder API, baca artikel Konsep inti Holder API.
Kompatibilitas versi Android
Holder API didukung di Android 6 (level API 23) dan yang lebih tinggi.
Penerapan
Untuk menggunakan Credential Manager Holder API, 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") }
Buat 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 set creationOptions selama pendaftaran dan penawaran kredensial yang dikirim oleh penerbit untuk menentukan entri yang ditampilkan di UI Pengelola Kredensial. Lihat
contoh aplikasi dompet open source untuk mengetahui contoh pencocokan.
Menangani permintaan penerbitan
Selanjutnya, dompet perlu 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
akan 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 yang memanggil. Anda dapat mengambilnya dengan
getCallingRequest, yang menampilkanCreateCredentialRequest. Jika permintaan adalah untuk kredensial digital, permintaan tersebut adalah instanceCreateDigitalCredentialRequest, yang berisi JSON permintaan penerbitan di propertirequestJson. Anda dapat memprosesnya dengan contoh kode 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)
}
Pengesahan kunci
Perhatikan hal-hal berikut tentang pengesahan kunci:
- Saat membuat pengesahan kunci, Anda mungkin menggunakan
BigInteger.toByteArray()untuk mengonversi materi kunci menjadi, misalnya, kunci web JSON. Metode ini terkadang menambahkan byte tanda dan menyebabkan error validasi. Jika hal ini terjadi, hapus byte ini sebelum mengirimkan pengesahan kunci ke penerbit. - Sebaiknya gunakan
android_key_attestationsebagai jenis bukti kunci.
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 mengirim 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.