Для получения и хранения учетных данных от эмитентов вашему приложению-держателю необходимо обрабатывать потоки выдачи. В потоке выдачи веб-сайт или приложение эмитента отправляет приложению-держателю предложение об учетных данных, содержащее подробную информацию, необходимую для предоставления учетных данных. Приложение-держатель использует RegistryManager для регистрации в Credential Manager типов учетных данных, которые оно намерено обрабатывать. Это позволяет пользователю отображать и выбирать приложение во время запроса на выдачу учетных данных.
Для получения более подробной информации о том, как учетные данные работают с Holder API, ознакомьтесь с основными концепциями Holder API .
совместимость с версиями Android
API Holder поддерживается на Android 6 (уровень API 23) и выше.
Выполнение
Для использования API Credential Manager Holder добавьте следующие зависимости в скрипт сборки вашего модуля приложения:
классный
dependencies { // Use to implement credentials registrys implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04" }
Котлин
dependencies { // Use to implement credentials registrys implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04") }
Создайте RegistryManager
Создайте экземпляр RegistryManager и зарегистрируйте в нем запрос RegisterCreationOptionsRequest .
val registryManager = RegistryManager.create(context)
try {
registryManager.registerCreationOptions(object :
RegisterCreationOptionsRequest(
creationOptions = buildIssuanceData(),
matcher = loadIssuanceMatcher(),
type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
id = "openid4vci",
) {}
)
} catch (e: Exception) {
Log.e(TAG, "Issuance registration failed.", e)
}
Сопоставитель представляет собой исполняемый файл WebAssembly (Wasm), который получает параметры creationOptions установленные во время регистрации, и предложение учетных данных, отправленное эмитентом, для определения записей, отображаемых в пользовательском интерфейсе менеджера учетных данных. Пример работы сопоставителя можно найти в примере приложения-кошелька с открытым исходным кодом.
Обработка запроса на выдачу
Далее, кошелек должен обрабатывать выбор пользователем варианта создания учетных данных. Определите активность, которая будет отслеживать фильтр намерения androidx.credentials.registry.provider.action.CREATE_CREDENTIAL , как показано в примере кошелька .
Интент, запускающий активность, содержит запрос на создание и вызывающий источник, которые можно извлечь с помощью функции PendingIntentHandler.retrieveProviderCreateCredentialRequest . API возвращает объект ProviderCreateCredentialRequest , содержащий всю информацию, связанную с запросом на создание. Есть два ключевых компонента:
- Приложение, отправившее запрос. Эту информацию можно получить с помощью
getCallingAppInfo. - Запрос от вызывающего приложения. Вы можете получить его с помощью
getCallingRequest, который возвращает объектCreateCredentialRequest. Если запрос касается цифровых учетных данных, это экземплярCreateDigitalCredentialRequest, содержащий JSON-данные запроса на выдачу в свойствеrequestJson. Вы можете обработать это с помощью следующего примера кода:
val pendingIntentRequest =
PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
Log.i(TAG, "Got DC creation request: ${request.requestJson}")
processCreationRequest(request.requestJson)
}
Возвращает ответ о создании
После того, как кошелек завершит необходимые шаги для сохранения учетных данных, завершите операцию, отправив ответ с учетными данными:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
resultData,
CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()
В случае возникновения исключения вы можете аналогичным образом отправить запрос на отправку данных с исключением:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
resultData,
CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Чтобы увидеть полный пример возврата ответа с учетными данными в контексте, см. пример приложения .