L'API Credential Manager consente di emettere credenziali per le app di holder Android (chiamate anche "wallet"). Questa guida spiega come salvare le credenziali nell'holder preferito di un utente.
Implementazione
Questa sezione descrive in dettaglio i passaggi necessari per emettere credenziali digitali.
Aggiungi dipendenze
Aggiungi le seguenti dipendenze allo script di build Gradle:
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha02") }
Trendy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha02" }
Inizializza Gestore delle credenziali
Inizializza un'istanza della classe CredentialManager.
val credentialManager = CredentialManager.create(context)
Crea una richiesta di emissione
La richiesta di creazione di credenziali digitali deve contenere una stringa JSON che segue il protocollo standard OpenID4VCI. Ecco un esempio di come appare una richiesta 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": "..."
}
}
}
}
]
Crea un CreateDigitalCredentialRequest che contenga la richiesta di emissione.
val issuanceRequestJson = "{ ... }" // Your issuance JSON
val createRequest = CreateDigitalCredentialRequest(
requestJson = issuanceRequestJson,
origin = null
)
Effettua la richiesta di emissione
Emetti la credenziale nell'holder dell'utente utilizzando la funzione createCredential. Questa funzione avvia il selettore del riquadro inferiore di Gestore delle credenziali che consente all'utente di selezionare l'app di holder in cui vuole archiviare la credenziale.
try {
val response = credentialManager.createCredential(
context = context,
request = createRequest
)
handleSuccess(response as CreateDigitalCredentialResponse)
} catch (e: CreateCredentialException) {
handleCreateException(e)
}
Gestisci la risposta
Dopo aver effettuato la richiesta di emissione, verrà restituito un CreateDigitalCredentialResponse. Questa risposta contiene una stringa responseJson, che descrive il risultato dell'emissione.
fun handleSuccess(response: CreateDigitalCredentialResponse) {
val responseJson = response.responseJson
// Parse responseJson according to your protocol (e.g. OpenID4VCI)
}
Gestisci le eccezioni
Se il flusso di emissione non va a buon fine, createCredential genera un CreateCredentialException, che la tua app deve gestire:
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
}
}
}