Credential Holder API позволяет приложениям Android управлять цифровыми учетными данными и предоставлять их проверяющим.
Начать
Чтобы использовать API держателя учетных данных, добавьте следующие зависимости в сценарий сборки модуля приложения:
// 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" }
Зарегистрируйте учетные данные с помощью диспетчера учетных данных
Кошелек должен зарегистрировать метаданные учетных данных, чтобы диспетчер учетных данных мог фильтровать и отображать их в селекторе учетных данных при поступлении запроса.

Пользовательский интерфейс выбора диспетчера учетных данных
Формат этих метаданных передается в RegisterCredentialsRequest
. Создайте [RegistryManager][1]
и зарегистрируйте учетные данные:
В этом примере метаданные компилируются из базы данных записей учетных данных. В нашем образце кошелька вы можете найти ссылку , которая регистрирует метаданные при загрузке приложения. В будущем состав базы данных учетных данных будет поддерживаться API Jetpack. На этом этапе вы можете зарегистрировать метаданные учетных данных как четко определенные структуры данных.
Реестр сохраняется после перезагрузки устройства. Повторная регистрация того же реестра с тем же идентификатором + тип приведет к перезаписи предыдущей записи реестра. Поэтому вам нужно будет перерегистрироваться только тогда, когда ваши учетные данные изменились.
Необязательно: создайте сопоставление
Диспетчер учетных данных является агонистом протокола; он рассматривает реестр метаданных как непрозрачный объект и не проверяет и не проверяет его содержимое. Следовательно, кошелек должен предоставить сопоставитель, работоспособный двоичный файл, который может обрабатывать собственные данные кошелька и генерировать метаданные отображения на основе входящего запроса. Диспетчер учетных данных запустит средство сопоставления в изолированной среде без доступа к сети или диску, чтобы ничего не просочилось в кошелек до того, как пользовательский интерфейс будет отображен пользователю.
API Credential Manager предоставит средства сопоставления для популярных протоколов, сегодня OpenID4VP. Официально он еще не выпущен, поэтому пока используйте наш образец сопоставления для протокола OpenID4VP v24 .
Обработка выбранных учетных данных
Далее кошелек должен обработать, когда пользователь выбирает учетные данные. Вы можете определить действие, которое прослушивает фильтр намерений androidx.credentials.registry.provider.action.GET_CREDENTIAL
. Наш образец кошелька демонстрирует эту процедуру .
Намерение, запускающее действие, будет содержать запрос Verifier и источник вызова, который можно извлечь с помощью функции PendingIntentHandler.retrieveProviderGetCredentialRequest
. API возвращает ProviderGetCredentialRequest
, содержащий всю информацию, связанную с данным запросом проверяющего. Есть три ключевых компонента:
- Приложение, сделавшее запрос. Вы можете получить это с помощью
getCallingAppInfo
. - Выбранные учетные данные. Получить информацию о том, какого кандидата выбрал пользователь, можно через метод расширения
selectedEntryId
; это будет соответствовать идентификатору учетных данных, который вы зарегистрировали. - Любые конкретные запросы, сделанные верификатором. Вы можете получить это из метода
getCredentialOptions
. В этом случае вам следует ожидать найти в этом спискеGetDigitalCredentialOption
, содержащий запрос цифровых учетных данных.
Чаще всего верификатор отправляет запрос на представление цифровых учетных данных, чтобы вы могли обработать его с помощью следующего примера кода:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Вы можете увидеть пример этого в нашем образце кошелька .
Рендеринг пользовательского интерфейса кошелька
Как только учетные данные выбраны, кошелек вызывается, и пользователь проходит через его пользовательский интерфейс. В примере это биометрическая подсказка .
Вернуть ответ с учетными данными
Как только кошелек будет готов отправить результат обратно, вы можете сделать это, завершив действие ответом с учетными данными:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Если есть исключение, вы можете аналогичным образом отправить исключение учетных данных:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
В примере приложения приведен пример того, как вернуть ответ учетных данных в контексте.