Emettere credenziali digitali

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