Ausstellung von Anmeldedaten mit Ihrer Inhaber-App verarbeiten

Damit Ihre Inhaber-App Anmeldedaten von Ausstellern empfangen und speichern kann, muss sie Ausstellungsabläufe verarbeiten. In einem Ausstellungsablauf sendet die Website oder App des Ausstellers ein Angebot für Anmeldedaten an die Inhaber-App. Darin sind die Informationen enthalten, die zum Bereitstellen von Anmeldedaten erforderlich sind. Die Inhaber-App verwendet RegistryManager, um die Anmeldedatentypen, die sie verarbeiten möchte, beim Credential Manager zu registrieren. So kann die App dem Nutzer bei einer Ausstellungsanfrage angezeigt und von ihm ausgewählt werden, um die Anmeldedaten zu erhalten.

Weitere Informationen zur Verwendung von Anmeldedaten mit der Holder API finden Sie unter Wichtige Konzepte der Holder API.

Android-Versionskompatibilität

Die Holder API wird ab Android 6 (API-Level 23) unterstützt.

Implementierung

Wenn Sie die Credential Manager Holder API verwenden möchten, fügen Sie dem Build-Skript Ihres App-Moduls die folgenden Abhängigkeiten hinzu:

Groovy

dependencies {
    // Use to implement credentials registrys

    implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04"

}

Kotlin

dependencies {
    // Use to implement credentials registrys

    implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04")

}

RegistryManager erstellen

Erstellen Sie eine RegistryManager-Instanz und registrieren Sie eine RegisterCreationOptionsRequest-Anfrage damit.

val registryManager = RegistryManager.create(context)

try {
    registryManager.registerCreationOptions(object :
        RegisterCreationOptionsRequest(
            creationOptions = buildIssuanceData(),
            matcher = loadIssuanceMatcher(),
            type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
            id = "openid4vci",
        ) {}
    )
} catch (e: Exception) {
    Log.e(TAG, "Issuance registration failed.", e)
}

Der Matcher ist eine WebAssembly-Binärdatei (Wasm), die die bei der Registrierung festgelegten creationOptions und das vom Aussteller gesendete Angebot für Anmeldedaten erhält, um die Einträge zu bestimmen, die in der Credential Manager-UI angezeigt werden. Ein Beispiel für einen Matcher finden Sie in der Open-Source-Beispiel-Wallet-App.

Ausstellungsanfrage verarbeiten

Als Nächstes muss die Wallet verarbeiten, wenn der Nutzer eine Option zum Erstellen von Anmeldedaten auswählt. Definieren Sie eine Aktivität, die auf den androidx.credentials.registry.provider.action.CREATE_CREDENTIAL Intent-Filter wartet, wie in der Beispiel-Wallet gezeigt.

Der Intent, der die Aktivität startet, enthält die Erstellungsanfrage und den Ursprung des Aufrufs, die Sie mit der Funktion PendingIntentHandler.retrieveProviderCreateCredentialRequest extrahieren können. Die API gibt eine ProviderCreateCredentialRequest zurück, die alle Informationen zur Erstellungsanfrage enthält. Es gibt zwei Hauptkomponenten:

  • Die App, die die Anfrage gestellt hat. Sie können sie mit getCallingAppInfo abrufen.
  • Die Anfrage der aufrufenden App. Sie können sie mit getCallingRequest abrufen, die eine CreateCredentialRequest zurückgibt. Wenn die Anfrage für digitale Anmeldedaten gilt, ist sie eine Instanz von CreateDigitalCredentialRequest, die das JSON der Ausstellungsanfrage in der Eigenschaft requestJson enthält. Sie können sie mit dem folgenden Beispielcode verarbeiten:
val pendingIntentRequest =
    PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
    Log.i(TAG, "Got DC creation request: ${request.requestJson}")
    processCreationRequest(request.requestJson)
}

Erstellungsantwort zurückgeben

Sobald die Wallet die Schritte zum Speichern der Anmeldedaten abgeschlossen hat, beenden Sie die Aktivität mit der Antwort zu den Anmeldedaten:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
    resultData,
    CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()

Wenn eine Ausnahme auftritt, können Sie die Ausnahme für die Anmeldedaten auf ähnliche Weise senden:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
    resultData,
    CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()

Ein vollständiges Beispiel für die Rückgabe der Antwort zu den Anmeldedaten im Kontext finden Sie in der Beispiel-App.