Menerbitkan kredensial digital

Credential Manager API memungkinkan Anda menerbitkan kredensial ke aplikasi pemegang (juga disebut "wallet") Android. Panduan ini menjelaskan cara menerbitkan kredensial ke pemegang pilihan pengguna.

Penerapan

Bagian ini menjelaskan langkah-langkah yang diperlukan untuk menerbitkan kredensial digital.

Menambahkan dependensi

Tambahkan dependensi berikut ke skrip build gradle Anda:

Kotlin

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
    implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha02")
}

Groovy

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
    implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha02"
}

Melakukan inisialisasi Credential Manager

Lakukan inisialisasi instance class CredentialManager.

val credentialManager = CredentialManager.create(context)

Membuat permintaan penerbitan

Permintaan pembuatan kredensial digital harus berisi string JSON yang mengikuti protokol standar OpenID4VCI. Berikut adalah contoh tampilan permintaan OpenID4VCI:

"requests": [
  {
    "protocol": "openid4vci-v1",
    "data": {
      "credential_issuer": "https://digital-credentials.dev",
      "credential_configuration_ids": [
        "com.emvco.payment_card"
      ],
      "grants": {
        "urn:ietf:params:oauth:grant-type:pre-authorized_code": {
          "pre-authorized_code": "..."
        }
      }
    }
  }
]

Buat CreateDigitalCredentialRequest yang berisi permintaan penerbitan.

val issuanceRequestJson = "{ ... }" // Your issuance JSON
val createRequest = CreateDigitalCredentialRequest(
    requestJson = issuanceRequestJson,
    origin = null
)

Membuat permintaan penerbitan

Terbitkan kredensial kepada pemegang pengguna menggunakan fungsi createCredential. Fungsi ini meluncurkan pemilih sheet bawah Credential Manager yang memungkinkan pengguna memilih aplikasi pemegang tempat kredensial akan disimpan.

try {
    val response = credentialManager.createCredential(
        context = context,
        request = createRequest
    )
    handleSuccess(response as CreateDigitalCredentialResponse)
} catch (e: CreateCredentialException) {
    handleCreateException(e)
}

Menangani respons

Setelah Anda membuat permintaan penerbitan, CreateDigitalCredentialResponse akan ditampilkan. Respons ini berisi string responseJson, yang menjelaskan hasil penerbitan.

fun handleSuccess(response: CreateDigitalCredentialResponse) {
    val responseJson = response.responseJson
    // Parse responseJson according to your protocol (e.g. OpenID4VCI)
}

Menangani pengecualian

Jika alur penerbitan gagal, createCredential akan menampilkan CreateCredentialException, yang harus ditangani oleh aplikasi Anda:

fun handleCreateException(e: CreateCredentialException) {
    when (e) {
        is CreateCredentialCancellationException -> {
            // The user canceled the flow
        }
        is CreateCredentialInterruptedException -> {
            // The flow was interrupted (e.g. by another UI element)
        }
        is CreateCredentialNoCreateOptionException -> {
            // No wallet application is available to handle the request
        }
        is CreateCredentialUnsupportedException -> {
            // The device or the system doesn't support this request
        }
        is CreateCredentialProviderConfigurationException -> {
            // There is a configuration issue with the wallet provider
        }
        is CreateCredentialCustomException -> {
            // A protocol-specific error occurred
            val errorType = e.type
            val errorMessage = e.message
        }
        is CreateCredentialUnknownException -> {
            // An unknown error occurred
        }
        else -> {
            // Generic error handling
        }
    }
}