Menangani penerbitan kredensial dengan aplikasi pemegang Anda

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 menampilkan CreateCredentialRequest. Jika permintaan ditujukan untuk kredensial digital, permintaan tersebut adalah instance CreateDigitalCredentialRequest, yang berisi JSON permintaan penerbitan dalam properti requestJson. 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.