जारी करने वाली कंपनियों से क्रेडेंशियल पाने और उन्हें सेव करने के लिए, आपके होल्डर ऐप्लिकेशन को जारी करने की प्रोसेस को मैनेज करना होगा. जारी करने की प्रोसेस में, जारी करने वाली कंपनी की वेबसाइट या ऐप्लिकेशन, होल्डर ऐप्लिकेशन को क्रेडेंशियल का ऑफ़र भेजता है. इसमें क्रेडेंशियल उपलब्ध कराने के लिए ज़रूरी जानकारी शामिल होती है. होल्डर ऐप्लिकेशन, RegistryManager का इस्तेमाल करके, क्रेडेंशियल मैनेजर के साथ उन क्रेडेंशियल टाइप को रजिस्टर करता है जिन्हें वह मैनेज करना चाहता है. इससे, क्रेडेंशियल पाने के लिए जारी करने का अनुरोध करने पर, ऐप्लिकेशन को दिखाया जा सकता है और उपयोगकर्ता उसे चुन सकता है.
Holder API के साथ क्रेडेंशियल कैसे काम करते हैं, इस बारे में ज़्यादा जानने के लिए, Holder API के मुख्य कॉन्सेप्ट पढ़ें.
Android के वर्शन के साथ काम करने की सुविधा
Holder API, Android 6 (एपीआई लेवल 23) और इसके बाद के वर्शन पर काम करता है.
लागू करना
क्रेडेंशियल मैनेजर Holder API का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन मॉड्यूल के बिल्ड स्क्रिप्ट में ये डिपेंडेंसी जोड़ें:
Groovy
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" }
Kotlin
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 फ़ंक्शन की मदद से निकाला जा सकता है. एपीआई, ProviderCreateCredentialRequest दिखाता है. इसमें, बनाने के अनुरोध से जुड़ी सारी जानकारी होती है. इसके दो मुख्य कॉम्पोनेंट होते हैं:
- अनुरोध करने वाला ऐप्लिकेशन.
getCallingAppInfoकी मदद से इसे वापस पाया जा सकता है. - कॉल करने वाले ऐप्लिकेशन से मिला अनुरोध. इसे
getCallingRequestकी मदद से वापस पाया जा सकता है. इससेCreateCredentialRequestमिलता है. अगर अनुरोध, डिजिटल क्रेडेंशियल के लिए है, तो यहCreateDigitalCredentialRequestका इंस्टेंस होता है. इसमें,requestJsonप्रॉपर्टी में जारी करने का अनुरोध JSON होता है. इसे इस सैंपल कोड की मदद से प्रोसेस किया जा सकता है:
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)
}
कुंजी की पुष्टि करना
कुंजी की पुष्टि करने के बारे में ये बातें ध्यान रखें:
- कुंजी की पुष्टि करने की प्रोसेस के दौरान, हो सकता है कि कुंजी के मटीरियल को JSON वेब कुंजी में बदलने के लिए,
BigInteger.toByteArray()का इस्तेमाल किया जा रहा हो. कभी-कभी इस तरीके से, साइन बाइट जोड़ा जा सकता है और पुष्टि करने में गड़बड़ी हो सकती है. अगर ऐसा होता है, तो जारी करने वाली कंपनी को कुंजी की पुष्टि करने की जानकारी भेजने से पहले, इन बाइट को हटा दें. - हमारा सुझाव है कि कुंजी के सबूत के टाइप के तौर पर, का इस्तेमाल करें
android_key_attestation.
बनाने का रिस्पॉन्स दिखाना
वॉलेट के क्रेडेंशियल सेव करने के लिए ज़रूरी चरण पूरे करने के बाद, क्रेडेंशियल के रिस्पॉन्स के साथ गतिविधि पूरी करें:
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()
कॉन्टेक्स्ट में क्रेडेंशियल का रिस्पॉन्स दिखाने का पूरा उदाहरण देखने के लिए, सैंपल ऐप्लिकेशन देखें.