La API de Credential Manager - Holder permite que las apps para Android administren y presenten credenciales digitales a los verificadores.
Comenzar
Para usar la API de Credential Manager - Holder, agrega las siguientes dependencias a la secuencia de comandos de compilación del módulo de tu app:
// 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" }
Registra credenciales con el Administrador de credenciales
Una billetera debe registrar los metadatos de las credenciales para que el Administrador de credenciales pueda filtrarlos y mostrarlos en el selector de credenciales cuando llegue una solicitud.

IU del selector del Administrador de credenciales
El formato de estos metadatos se pasa a un RegisterCredentialsRequest
.
Crea un [RegistryManager][1]
y registra las credenciales:
En este ejemplo, los metadatos se compilan a partir de una base de datos de entradas de credenciales. Puedes encontrar una referencia en nuestra billetera de ejemplo que registra los metadatos cuando se carga la app. En el futuro, la API de Jetpack admitirá la composición de la base de datos de credenciales. En ese momento, puedes registrar los metadatos de la credencial como estructuras de datos bien definidas.
El registro persiste después de que se reinicia el dispositivo. Si vuelves a registrar el mismo registro del mismo ID y tipo, se reemplazará el registro anterior. Por lo tanto, solo debes volver a registrarte cuando cambien los datos de tu credencial.
Opcional: Crea un comparador
El Administrador de credenciales es agonista de protocolo; trata el registro de metadatos como un objeto blob opaco y no verifica ni comprueba su contenido. Por lo tanto, la billetera debe proporcionar un comparador, un objeto binario ejecutable que pueda procesar los datos de la billetera y generar los metadatos de visualización en función de una solicitud entrante. El Administrador de credenciales ejecutará el comparador en un entorno de zona de pruebas sin acceso a la red ni al disco, de modo que no se filtre nada a una billetera antes de que se renderice la IU al usuario.
La API de Credential Manager proporcionará comparadores para protocolos populares, actualmente, OpenID4VP. Aún no se lanzó oficialmente, por lo que, por ahora, usa nuestro comparador de muestra para el protocolo OpenID4VP v24.
Controla una credencial seleccionada
A continuación, la billetera debe controlar cuándo el usuario selecciona una credencial. Puedes definir una actividad que escuche el filtro de intents androidx.credentials.registry.provider.action.GET_CREDENTIAL
.
En nuestra billetera de ejemplo, se muestra este procedimiento.
El intent que inicia la actividad contendrá la solicitud del verificador y el origen de la llamada, que se pueden extraer con la función PendingIntentHandler.retrieveProviderGetCredentialRequest
. La API muestra un ProviderGetCredentialRequest
que contiene toda la información asociada con la solicitud de verificador determinada. Hay tres componentes clave:
- La app que realizó la solicitud. Puedes recuperarlo con
getCallingAppInfo
. - La credencial seleccionada Puedes obtener información sobre qué candidato eligió el usuario a través del método de extensión
selectedEntryId
, que coincidirá con el ID de credencial que registraste. - Cualquier solicitud específica que haya realizado el verificador Puedes obtener esto del método
getCredentialOptions
. En este caso, deberías encontrar un elementoGetDigitalCredentialOption
en esta lista, que contiene la solicitud de credenciales digitales.
Por lo general, el verificador realizará una solicitud de presentación de credenciales digitales para que puedas procesarla con el siguiente código de muestra:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Puedes ver un ejemplo de esto en nuestra billetera de ejemplo.
Renderiza la IU de la billetera
Una vez que se selecciona la credencial, se invoca la billetera y se dirige al usuario a su IU. En el ejemplo, esta es una solicitud biométrica.
Muestra la respuesta de la credencial
Una vez que la billetera esté lista para enviar el resultado, puedes hacerlo terminando la actividad con la respuesta de la credencial:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Si hay una excepción, puedes enviar la excepción de credencial de la siguiente manera:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Consulta la app de ejemplo para ver un ejemplo de cómo mostrar la respuesta de credencial en contexto.