Digitale Anmeldedaten ausstellen

Mit der Credential Manager API können Sie Anmeldedaten für Android-Inhaber-Apps (auch „Wallet“-Apps genannt) ausstellen. In diesem Leitfaden wird erklärt, wie Sie Anmeldedaten im bevorzugten Inhaber eines Nutzers speichern.

Implementierung

In diesem Abschnitt werden die Schritte beschrieben, die zum Ausstellen digitaler Anmeldedaten erforderlich sind.

Abhängigkeiten hinzufügen

Fügen Sie Ihrem Gradle-Build-Skript die folgenden Abhängigkeiten hinzu:

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

Credential Manager initialisieren

Initialisieren Sie eine Instanz der Klasse CredentialManager.

val credentialManager = CredentialManager.create(context)

Ausstellungsanfrage erstellen

Die Anfrage zum Erstellen digitaler Anmeldedaten muss einen JSON-String enthalten, der dem OpenID4VCI Standardprotokoll folgt. Hier ein Beispiel für eine OpenID4VCI-Anfrage:

"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": "..."
        }
      }
    }
  }
]

Erstellen Sie eine CreateDigitalCredentialRequest, die die Ausstellungsanfrage enthält.

val issuanceRequestJson = "{ ... }" // Your issuance JSON
val createRequest = CreateDigitalCredentialRequest(
    requestJson = issuanceRequestJson,
    origin = null
)

Ausstellungsanfrage stellen

Stellen Sie die Anmeldedaten mit der Funktion createCredential für den Inhaber des Nutzers aus. Mit dieser Funktion wird die Credential Manager-Auswahlleiste als Ansicht am unteren Rand gestartet, über die der Nutzer die Inhaber-App auswählen kann, in der die Anmeldedaten gespeichert werden sollen.

try {
    val response = credentialManager.createCredential(
        context = context,
        request = createRequest
    )
    handleSuccess(response as CreateDigitalCredentialResponse)
} catch (e: CreateCredentialException) {
    handleCreateException(e)
}

Antwort verarbeiten

Nachdem Sie die Ausstellungsanfrage gestellt haben, wird eine CreateDigitalCredentialResponse zurückgegeben. Diese Antwort enthält einen responseJson-String, der das Ergebnis der Ausstellung beschreibt.

fun handleSuccess(response: CreateDigitalCredentialResponse) {
    val responseJson = response.responseJson
    // Parse responseJson according to your protocol (e.g. OpenID4VCI)
}

Ausnahmen verarbeiten

Wenn der Ausstellungsablauf fehlschlägt, löst createCredential eine CreateCredentialException aus, die von Ihrer App verarbeitet werden sollte:

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