Verifikasi kredensial digital dalam aplikasi Android dapat digunakan untuk mengautentikasi dan memberikan otorisasi pada identitas pengguna (seperti tanda pengenal pemerintah), properti tentang pengguna tersebut (seperti surat izin mengemudi, gelar akademik, atau atribut seperti usia atau alamat), atau skenario lain saat kredensial perlu dikeluarkan dan diverifikasi untuk menyatakan keaslian entitas.
Kredensial Digital adalah standar inkubator W3C publik yang
menentukan cara mengakses kredensial digital pengguna yang dapat diverifikasi dari
wallet digital, dan diterapkan untuk kasus penggunaan web dengan W3C Credential Management
API. Di Android, API
DigitalCredential
Pengelola Kredensial digunakan untuk memverifikasi kredensial digital.
Implementasi
Untuk memverifikasi kredensial digital di project Android Anda, lakukan hal berikut:
- Tambahkan dependensi ke skrip build aplikasi Anda dan lakukan inisialisasi
class
CredentialManager
. - Buat permintaan kredensial digital dan gunakan untuk melakukan inisialisasi
DigitalCredentialOption
, diikuti dengan mem-buildGetCredentialRequest
. - Luncurkan alur
getCredential
dengan permintaan yang dibuat untuk menerimaGetCredentialResponse
yang berhasil atau tangani pengecualian yang mungkin terjadi. Setelah pengambilan berhasil, validasi respons.
Menambahkan dependensi dan melakukan inisialisasi
Tambahkan dependensi berikut ke skrip build Gradle Anda:
dependencies {
implementation("androidx.credentials:credentials:1.5.0-beta01")
implementation("androidx.credentials:credentials-play-services-auth:1.5.0-beta01")
}
Selanjutnya, Lakukan inisialisasi instance class CredentialManager
.
val credentialManager = CredentialManager.create(context)
Membuat permintaan kredensial digital
Buat permintaan kredensial digital dan gunakan untuk melakukan inisialisasi
DigitalCredentialOption
.
// The request in the JSON format to conform with
// the JSON-ified Digital Credentials API request definition.
val requestJson = generateRequestFromServer()
val digitalCredentialOption =
GetDigitalCredentialOption(requestJson = requestJson)
// Use the option from the previous step to build the `GetCredentialRequest`.
val getCredRequest = GetCredentialRequest(
listOf(digitalCredentialOption)
)
Mendapatkan kredensial
Luncurkan alur getCredential
dengan permintaan yang dibuat. Anda akan menerima
GetCredentialResponse
yang berhasil, atau GetCredentialException
jika
permintaan gagal.
Alur getCredential
memicu dialog sistem Android untuk menampilkan
opsi kredensial yang tersedia bagi pengguna dan mengumpulkan pilihan mereka. Selanjutnya, aplikasi dompet
yang berisi opsi kredensial yang dipilih akan menampilkan UI untuk mengumpulkan izin
dan melakukan tindakan yang diperlukan untuk menghasilkan respons kredensial digital.
coroutineScope.launch {
try {
val result = credentialManager.getCredential(
context = activityContext,
request = getCredRequest
)
verifyResult(result)
} catch (e : GetCredentialException) {
handleFailure(e)
}
}
// Handle the successfully returned credential.
fun verifyResult(result: GetCredentialResponse) {
val credential = result.credential
when (credential) {
is DigitalCredential -> {
val responseJson = credential.credentialJson
validateResponseOnServer(responseJson)
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential ${credential.type}")
}
}
}
// Handle failure.
fun handleFailure(e: GetCredentialException) {
when (e) {
is GetCredentialCancellationException -> {
// The user intentionally canceled the operation and chose not
// to share the credential.
}
is GetCredentialInterruptedException -> {
// Retry-able error. Consider retrying the call.
}
is NoCredentialException -> {
// No credential was available.
}
is CreateCredentialUnknownException -> {
// An unknown, usually unexpected, error has occurred. Check the
// message error for any additional debugging information.
}
is CreateCredentialCustomException -> {
// You have encountered a custom error thrown by the wallet.
// If you made the API call with a request object that's a
// subclass of CreateCustomCredentialRequest using a 3rd-party SDK,
// then you should check for any custom exception type constants
// within that SDK to match with e.type. Otherwise, drop or log the
// exception.
}
else -> Log.w(TAG, "Unexpected exception type ${e::class.java}")
}
}