L'API Credential Manager – Holder permet aux applications Android de gérer et de présenter des identifiants numériques aux validateurs.
Premiers pas
Pour utiliser l'API Credential Manager – Holder, ajoutez les dépendances suivantes au script de compilation du module de votre application :
// 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" }
Enregistrer des identifiants avec le Gestionnaire d'identifiants
Un portefeuille doit enregistrer les métadonnées des identifiants pour que Credential Manager puisse les filtrer et les afficher dans le sélecteur d'identifiants lorsqu'une requête est reçue.

Interface utilisateur du sélecteur du Gestionnaire d'identifiants
Le format de ces métadonnées est transmis à un RegisterCredentialsRequest
.
Créez un [RegistryManager][1]
et enregistrez les identifiants :
Dans cet exemple, les métadonnées sont compilées à partir d'une base de données d'entrées d'identifiants. Vous trouverez une référence dans notre exemple de portefeuille qui enregistre les métadonnées lors du chargement de l'application. À l'avenir, la composition de la base de données d'identifiants sera prise en charge par l'API Jetpack. À ce stade, vous pouvez enregistrer les métadonnées des identifiants en tant que structures de données bien définies.
Le registre est conservé à chaque redémarrage de l'appareil. Si vous réenregistrez le même registre avec le même ID et le même type, l'enregistrement précédent sera écrasé. Par conséquent, vous ne devriez avoir besoin de vous réinscrire que lorsque vos données d'identification ont changé.
Facultatif : Créer un détecteur
Le Gestionnaire d'identifiants est agnostique au protocole. Il traite le registre de métadonnées comme un blob opaque et ne vérifie ni ne contrôle son contenu. Par conséquent, le portefeuille doit fournir un outil de mise en correspondance, un binaire exécutable qui peut traiter les propres données du portefeuille et générer les métadonnées d'affichage en fonction d'une requête entrante. Le Gestionnaire d'identifiants exécutera le comparateur dans un environnement de bac à sable sans accès au réseau ni au disque, afin qu'aucune information ne soit divulguée à un portefeuille avant que l'UI ne soit affichée à l'utilisateur.
L'API Credential Manager fournira des comparateurs pour les protocoles populaires, aujourd'hui OpenID4VP. Il n'est pas encore officiellement disponible. Pour l'instant, utilisez notre outil de correspondance d'exemple pour le protocole OpenID4VP.
Gérer un identifiant sélectionné
Ensuite, le portefeuille doit gérer la sélection d'un identifiant par l'utilisateur. Vous pouvez définir une activité qui écoute le filtre d'intent androidx.credentials.registry.provider.action.GET_CREDENTIAL
.
Notre exemple de portefeuille illustre cette procédure.
L'intent qui lance l'activité contient la requête du validateur et l'origine de l'appel, qui peuvent être extraites avec la fonction PendingIntentHandler.retrieveProviderGetCredentialRequest
. L'API renvoie un ProviderGetCredentialRequest
contenant toutes les informations associées à la demande de validation donnée. Il se compose de trois éléments clés :
- Application à l'origine de la requête. Vous pouvez le récupérer avec
getCallingAppInfo
. - Identifiant sélectionné. Vous pouvez obtenir des informations sur le candidat choisi par l'utilisateur grâce à la méthode d'extension
selectedEntryId
. L'ID d'identifiant ainsi obtenu correspondra à celui que vous avez enregistré. - Toute demande spécifique formulée par le vérificateur. Vous pouvez l'obtenir à partir de la méthode
getCredentialOptions
. Dans ce cas, vous devriez trouver unGetDigitalCredentialOption
dans cette liste, contenant la demande d'identifiants numériques.
Le plus souvent, le vérificateur envoie une demande de présentation d'identifiant numérique. Vous pouvez la traiter avec l'exemple de code suivant :
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Vous trouverez un exemple dans notre portefeuille exemple.
Afficher l'UI du portefeuille
Une fois les identifiants sélectionnés, le portefeuille est appelé et l'utilisateur est redirigé vers son interface utilisateur. Dans l'exemple, il s'agit d'une invite biométrique.
Renvoyer la réponse des identifiants
Une fois le portefeuille prêt à renvoyer le résultat, vous pouvez le faire en terminant l'activité avec la réponse d'identifiant :
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
En cas d'exception, vous pouvez envoyer l'exception d'identifiant de la même manière :
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Consultez l'application exemple pour découvrir comment renvoyer la réponse d'identifiant en contexte.