API Credential Manager - Holder позволяет приложениям Android управлять цифровыми учетными данными и предоставлять их проверяющим.
Начать
Чтобы использовать API Credential Manager - Holder, добавьте следующие зависимости в скрипт сборки модуля вашего приложения:
// 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. После этого вы сможете регистрировать метаданные учётных данных как чётко определённые структуры данных.
Реестр сохраняется после перезагрузки устройства. Повторная регистрация того же реестра с тем же идентификатором и типом перезапишет предыдущую запись. Поэтому повторную регистрацию следует выполнять только при изменении учётных данных.
Необязательно: создайте сопоставитель
Диспетчер учётных данных (Credential Manager) — это агонистический протокол; он рассматривает реестр метаданных как непрозрачный объект и не проверяет его содержимое. Поэтому кошелёк должен предоставлять сопоставитель — исполняемый двоичный файл, который может обрабатывать собственные данные кошелька и генерировать отображаемые метаданные на основе входящего запроса. Диспетчер учётных данных (Credential Manager) запустит сопоставитель в изолированной среде без доступа к сети и диску, чтобы предотвратить утечку данных в кошелёк до отображения пользовательского интерфейса.
API диспетчера учётных данных будет предоставлять сопоставители для популярных протоколов, например, OpenID4VP. Он ещё не выпущен официально, поэтому пока используйте наш пример сопоставителя для протокола OpenID4VP .
Обработать выбранные учетные данные
Далее, кошелёк должен обрабатывать выбор учётных данных пользователем. Вы можете определить Activity, которое будет прослушивать фильтр намерений androidx.credentials.registry.provider.action.GET_CREDENTIAL
. Наш пример кошелька демонстрирует эту процедуру .
Намерение, запускающее действие, будет содержать запрос верификатора и источник вызова, которые можно извлечь с помощью функции 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()
Обратитесь к примеру приложения за примером того, как вернуть ответ с учетными данными в контексте.