O Gerenciador de credenciais: a API Holder permite que apps Android gerenciem e apresentem credenciais digitais aos verificadores.
Primeiros passos
Para usar a API Credential Manager - Holder, adicione as seguintes dependências ao script de build do módulo do 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" }
Registrar credenciais com o Gerenciador de credenciais
Uma carteira precisa registrar metadados de credencial para que o Gerenciador de credenciais possa filtrá-los e mostrá-los no seletor de credenciais quando uma solicitação chegar.

Interface do seletor do Gerenciador de credenciais
O formato desses metadados é transmitido para um RegisterCredentialsRequest
.
Crie um [RegistryManager][1]
e registre as credenciais:
Neste exemplo, os metadados são compilados em um banco de dados de entradas de credenciais. Você pode encontrar uma referência na nossa carteira de exemplo, que registra os metadados na carga do app. No futuro, a API Jetpack vai oferecer suporte à composição de banco de dados de credenciais. Nesse ponto, você pode registrar os metadados da credencial como estruturas de dados bem definidas.
O registro persiste em todas as reinicializações do dispositivo. O registro novamente do mesmo registro do mesmo ID + tipo vai substituir o registro anterior. Portanto, você só vai precisar se registrar novamente quando os dados da credencial forem alterados.
Opcional: criar um comparador
O Gerenciador de credenciais é agonista de protocolo. Ele trata o registro de metadados como um blob opaco e não verifica nem verifica o conteúdo. Portanto, a carteira precisa fornecer um comparador, um binário executável que possa processar os dados da carteira e gerar os metadados de exibição com base em uma solicitação recebida. O Gerenciador de credenciais vai executar o comparador em um ambiente de sandbox sem acesso à rede ou ao disco para que nada vaze para uma carteira antes que a interface seja renderizada para o usuário.
A API Gerenciador de credenciais vai fornecer matchers para protocolos conhecidos, como o OpenID4VP. Ele ainda não foi lançado oficialmente. Por enquanto, use nosso comparador de amostras para o protocolo OpenID4VP v24.
Processar uma credencial selecionada
Em seguida, a carteira precisa processar quando uma credencial é selecionada pelo usuário. É
possível definir uma atividade que detecta o
filtro de intent androidx.credentials.registry.provider.action.GET_CREDENTIAL
.
Nossa carteira de exemplo demonstra esse procedimento.
A intent que inicia a atividade vai conter a solicitação do verificador e
a origem da chamada, que podem ser extraídos com a
função
PendingIntentHandler.retrieveProviderGetCredentialRequest
. A API retorna um ProviderGetCredentialRequest
que contém todas as informações associadas à solicitação do verificador. Há
três componentes principais:
- O app que fez a solicitação. É possível extrair isso com
getCallingAppInfo
. - A credencial selecionada. Você pode receber informações sobre qual candidato o
usuário escolheu pelo método de extensão
selectedEntryId
. Ele vai corresponder ao ID da credencial que você registrou. - Todas as solicitações específicas feitas pelo verificador. É possível acessar isso pelo método
getCredentialOptions
. Nesse caso, você vai encontrar umGetDigitalCredentialOption
nessa lista, contendo a solicitação de credenciais digitais.
Na maioria das vezes, o verificador fará uma solicitação de apresentação de credencial digital para que você possa processá-la com o seguinte código de exemplo:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Confira um exemplo na nossa carteira de exemplo.
Renderizar a interface da carteira
Depois que a credencial é selecionada, a carteira é invocada e o usuário é direcionado à interface dela. No exemplo, é uma solicitações biométricas.
Retornar a resposta de credenciais
Quando a carteira estiver pronta para enviar o resultado, você poderá fazer isso finalizando a atividade com a resposta de credencial:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Se houver uma exceção, você poderá enviar a exceção de credencial da mesma forma:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Consulte o app de exemplo para conferir um exemplo de como retornar a resposta de credencial no contexto.