برای دریافت و ذخیره اعتبارنامهها از صادرکنندگان، برنامه دارنده شما باید جریانهای صدور را مدیریت کند. در یک جریان صدور، وبسایت یا برنامه صادرکننده یک پیشنهاد اعتبارنامه به برنامه دارنده ارسال میکند که اطلاعات مورد نیاز برای ارائه اعتبارنامه را شرح میدهد. برنامه دارنده از RegistryManager برای ثبت انواع اعتبارنامههایی که قصد مدیریت آنها را دارد در Credential Manager استفاده میکند. این امر به برنامه اجازه میدهد تا در طول درخواست صدور برای دریافت اعتبارنامه، به کاربر نمایش داده شود و توسط او انتخاب شود.
برای اطلاعات بیشتر در مورد نحوه کار اعتبارنامهها با API مربوط به Holder، مفاهیم اصلی API مربوط به Holder را مطالعه کنید.
سازگاری با نسخه اندروید
رابط برنامهنویسی کاربردی (API) مربوط به Holder در اندروید ۶ (سطح API ۲۳) و بالاتر پشتیبانی میشود.
پیادهسازی
برای استفاده از رابط برنامهنویسی کاربردی (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 ایجاد کنید و یک درخواست 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 تنظیمشده در طول ثبتنام و پیشنهاد اعتبارنامه ارسالشده توسط صادرکننده را برای تعیین ورودیهای نمایش دادهشده در رابط کاربری Credential Manager دریافت میکند. برای مثالی از تطبیقدهنده، به برنامه کیف پول نمونه متنباز مراجعه کنید.
رسیدگی به درخواست صدور
در مرحله بعد، کیف پول باید زمانی که کاربر گزینه ایجاد اعتبارنامه را انتخاب میکند، مدیریت کند. یک فعالیت تعریف کنید که به فیلتر اینتنت androidx.credentials.registry.provider.action.CREATE_CREDENTIAL گوش دهد، همانطور که در کیف پول نمونه نشان داده شده است.
اینتنتی که اکتیویتی را اجرا میکند شامل درخواست ایجاد و فراخوانی origin است که میتوانید آن را با تابع 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()
برای دیدن یک مثال کامل از برگرداندن پاسخ اعتبارنامه در متن، به برنامه نمونه مراجعه کنید.