Mit der Credential Manager – Holder API können Android-Apps digitale Anmeldedaten verwalten und Prüfern präsentieren.
Erste Schritte
Wenn Sie die Credential Manager – Holder API verwenden möchten, fügen Sie dem Build-Script Ihres App-Moduls die folgenden Abhängigkeiten hinzu:
// In your app module's build.gradle:
dependencies {
implementation(libs.androidx.registry.provider)
implementation(libs.androidx.registry.provider.play.services)
}
// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha01"
androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }
Anmeldedaten beim Anmeldedaten-Manager registrieren
Ein Wallet muss Anmeldedatenmetadaten registrieren, damit der Anmeldedaten-Manager sie bei einer Anfrage filtern und in der Anmeldedatenauswahl anzeigen kann.

Benutzeroberfläche der Anmeldedaten-Manager-Auswahl
Das Format dieser Metadaten wird an eine RegisterCredentialsRequest
übergeben.
Erstellen Sie eine [RegistryManager][1]
und registrieren Sie die Anmeldedaten:
In diesem Beispiel werden die Metadaten aus einer Datenbank mit Anmeldedaten erstellt. In unserem Beispiel-Wallet finden Sie eine Referenz, in der die Metadaten beim Laden der App registriert werden. In Zukunft wird die Zusammenstellung von Anmeldedatenbanken von der Jetpack API unterstützt. Anschließend können Sie die Anmeldedaten-Metadaten als klar definierte Datenstrukturen registrieren.
Die Registrierung bleibt nach Neustarts des Geräts erhalten. Wenn Sie dieselbe Registry mit derselben ID und demselben Typ noch einmal registrieren, wird der vorherige Registry-Eintrag überschrieben. Daher müssen Sie sich nur dann neu registrieren, wenn sich Ihre Anmeldedaten geändert haben.
Optional: Abgleich erstellen
Der Anmeldedaten-Manager ist protokollunabhängig. Er behandelt die Metadaten-Registry als undurchsichtigen Blob und überprüft ihren Inhalt nicht. Daher muss das Wallet einen Matcher bereitstellen, einen ausführbaren Binärcode, der die eigenen Daten des Wallets verarbeiten und die Anzeigemetadaten basierend auf einer eingehenden Anfrage generieren kann. Der Anmeldedaten-Manager führt den Matcher in einer Sandbox-Umgebung ohne Netzwerk- oder Laufwerkzugriff aus, damit keine Daten in ein Wallet gelangen, bevor die Benutzeroberfläche für den Nutzer gerendert wird.
Die Credential Manager API bietet Abgleiche für gängige Protokolle, derzeit OpenID4VP. Es wurde noch nicht offiziell veröffentlicht. Verwenden Sie daher vorerst unseren Beispiel-Matcher für das OpenID4VP-Protokoll v24.
Ausgewählte Anmeldedaten verarbeiten
Als Nächstes muss der Wallet damit umgehen, wenn ein Nutzer Anmeldedaten auswählt. Sie können eine Aktivität definieren, die auf den Intent-Filter androidx.credentials.registry.provider.action.GET_CREDENTIAL
achtet.
In unserem Beispiel-Wallet wird dieser Vorgang veranschaulicht.
Die Absicht, die die Aktivität startet, enthält die Anfrage des Verifiers und den Aufrufursprung, die mit der Funktion PendingIntentHandler.retrieveProviderGetCredentialRequest
extrahiert werden können. Die API gibt einen ProviderGetCredentialRequest
zurück, der alle Informationen enthält, die mit der angegebenen Anfrage des Verifiers verknüpft sind. Es gibt drei Hauptkomponenten:
- Die App, die die Anfrage gestellt hat. Sie können sie mit
getCallingAppInfo
abrufen. - Die ausgewählten Anmeldedaten. Informationen dazu, welchen Kandidaten der Nutzer ausgewählt hat, erhalten Sie über die Erweiterungsmethode
selectedEntryId
. Diese stimmt mit der Anmeldedaten-ID überein, die Sie registriert haben. - Alle spezifischen Anfragen, die der Prüfer gestellt hat. Sie können sie über die Methode
getCredentialOptions
abrufen. In diesem Fall sollte in dieser Liste eineGetDigitalCredentialOption
enthalten sein, die die Anfrage für digitale Anmeldedaten enthält.
In den meisten Fällen sendet der Prüfer eine Anfrage zur Präsentation digitaler Anmeldedaten, die Sie mit dem folgenden Beispielcode verarbeiten können:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Ein Beispiel dafür finden Sie in unserer Beispiel-Brieftasche.
Wallet-Benutzeroberfläche rendern
Sobald die Anmeldedaten ausgewählt wurden, wird das Wallet aufgerufen und der Nutzer wird durch die Benutzeroberfläche geführt. Im Beispiel ist dies ein biometricher Prompt.
Antwort zu Anmeldedaten zurückgeben
Sobald das Wallet das Ergebnis zurücksenden kann, kannst du die Aktivität mit der Antwort auf die Anmeldedaten abschließen:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Wenn es eine Ausnahme gibt, können Sie die Anmeldedatenausnahme auf ähnliche Weise senden:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
In der Beispiel-App finden Sie ein Beispiel dafür, wie Sie die Antwort mit Anmeldedaten im Kontext zurückgeben.