L'API Gestionnaire d'identifiants – Titulaire permet aux applications Android de gérer et de présenter des identifiants numériques aux vérificateurs.
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 d'identifiants afin que le Gestionnaire d'identifiants puisse les filtrer et les afficher dans le sélecteur d'identifiants lorsqu'une requête est envoyée.

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 portefeuille exemple 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 d'identifiant 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 outil de mise en correspondance
Le Gestionnaire d'identifiants est agonistique par rapport au protocole. Il traite le registre de métadonnées comme un blob opaque et ne vérifie ni ne vérifie son contenu. Par conséquent, le portefeuille doit fournir un outil de mise en correspondance, un binaire exécutable capable de traiter les données du portefeuille et de générer les métadonnées d'affichage en fonction d'une requête entrante. Le Gestionnaire d'identifiants exécute le moteur de mise en correspondance dans un environnement de bac à sable sans accès au réseau ni au disque, de sorte qu'aucune fuite ne se produit dans un portefeuille avant que l'UI ne soit affichée à l'utilisateur.
L'API Gestionnaire d'identifiants fournira des outils de mise en correspondance pour les protocoles populaires, actuellement OpenID4VP. Il n'est pas encore officiellement disponible. Pour l'instant, utilisez notre exemple de mise en correspondance pour le protocole OpenID4VP v24.
Gérer des identifiants sélectionnés
Ensuite, le portefeuille doit gérer la sélection d'identifiants 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 vérificateur et l'origine de l'appelant, qui peuvent être extraits avec la fonction PendingIntentHandler.retrieveProviderGetCredentialRequest
. L'API renvoie un ProviderGetCredentialRequest
contenant toutes les informations associées à la requête de validation donnée. Il existe trois composants clés:
- Application à l'origine de la requête. Vous pouvez le récupérer avec
getCallingAppInfo
. - Identifiants sélectionnés. Vous pouvez obtenir des informations sur le candidat que l'utilisateur a choisi via la méthode d'extension
selectedEntryId
. Celle-ci correspond à l'ID d'identifiant que vous avez enregistré. - Toutes les demandes spécifiques que le vérificateur a effectuées. Vous pouvez l'obtenir à partir de la méthode
getCredentialOptions
. Dans ce cas, vous devriez trouver unGetDigitalCredentialOption
dans cette liste, contenant la requête d'identifiants numériques.
Le plus souvent, le vérificateur envoie une requête de présentation d'identifiants numériques afin que vous puissiez 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 guidé dans son interface utilisateur. Dans l'exemple, il s'agit d'une invite biométrique.
Renvoyer la réponse des identifiants
Une fois que le portefeuille est prêt à renvoyer le résultat, vous pouvez le faire en terminant l'activité avec la réponse des identifiants:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
En cas d'exception, vous pouvez également envoyer l'exception d'identifiants:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Reportez-vous à l'exemple d'application pour découvrir comment renvoyer la réponse des identifiants en contexte.