Emettere credenziali digitali

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