Диспетчер учетных данных — API держателя

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-alpha02"

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" }

Зарегистрируйте учетные данные с помощью диспетчера учетных данных

Кошелек должен регистрировать метаданные учетных данных, чтобы диспетчер учетных данных мог фильтровать и отображать их в селекторе учетных данных при поступлении запроса.

Изображение, демонстрирующее пользовательский интерфейс цифровых учетных данных в диспетчере учетных данных
Рисунок 1. Пользовательский интерфейс цифровых учетных данных.

Пользовательский интерфейс селектора диспетчера учетных данных

Формат этих метаданных передаётся в RegisterCredentialsRequest . Создайте [RegistryManager][1] и зарегистрируйте учётные данные:

В этом примере метаданные компилируются из базы данных записей учётных данных. Вы можете найти ссылку в нашем примере кошелька , который регистрирует метаданные при загрузке приложения. В будущем составление базы данных учётных данных будет поддерживаться API Jetpack. После этого вы сможете регистрировать метаданные учётных данных как чётко определённые структуры данных.

Реестр сохраняется при перезагрузке устройства. Повторная регистрация того же реестра с тем же идентификатором и типом перезаписывает предыдущую запись. Поэтому выполняйте повторную регистрацию только после изменения ваших учётных данных.

Необязательно: создайте сопоставитель

Диспетчер учётных данных не зависит от протокола; он рассматривает реестр метаданных как непрозрачный объект и не проверяет его содержимое. Поэтому кошелёк должен предоставлять сопоставитель — исполняемый двоичный файл, который может обрабатывать собственные данные кошелька и генерировать отображаемые метаданные на основе входящего запроса. Диспетчер учётных данных запускает сопоставитель в изолированной среде без доступа к сети или диску, чтобы предотвратить утечку данных в кошелёк до отображения пользовательского интерфейса.

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()

Обратитесь к примеру приложения за примером того, как вернуть ответ с учетными данными в контексте.