Menerbitkan kredensial digital

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

Penerapan

Bagian ini menjelaskan langkah-langkah yang diperlukan untuk mengeluarkan 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"
}

Menginisialisasi 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

Keluarkan kredensial ke pemegang pengguna menggunakan fungsi createCredential. Fungsi ini meluncurkan pemilih panel bawah Credential Manager yang memungkinkan pengguna memilih aplikasi pemegang tempat mereka ingin menyimpan kredensial.

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
        }
    }
}