L'API Credential Manager ti consente di emettere credenziali per le app Android di titolari (chiamate anche "wallet"). Questa guida spiega come emettere credenziali per il titolare 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 delle credenziali digitali deve contenere una stringa JSON che segue il protocollo standard OpenID4VCI. Ecco un esempio di 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 contenente la richiesta di emissione.
val issuanceRequestJson = "{ ... }" // Your issuance JSON
val createRequest = CreateDigitalCredentialRequest(
requestJson = issuanceRequestJson,
origin = null
)
Effettua la richiesta di emissione
Emetti la credenziale per il titolare 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 titolare in cui memorizzare 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'eccezione 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
}
}
}