जारी करने वालों से क्रेडेंशियल पाने और उन्हें सेव करने के लिए, आपके होल्डर ऐप्लिकेशन को क्रेडेंशियल जारी करने के फ़्लो को मैनेज करना होगा. क्रेडेंशियल जारी करने की प्रोसेस को दो तरीकों से ट्रिगर किया जा सकता है:
- जारी करने वाले बैंक या कंपनी की ओर से शुरू किया गया फ़्लो: उपयोगकर्ता, जारी करने वाले बैंक या कंपनी के ऐप्लिकेशन या वेबसाइट से, वीडीसी जारी करने का अनुरोध ट्रिगर करता है. उदाहरण के लिए, कोई वेबसाइट अपने उपयोगकर्ताओं को "अपने वॉलेट में पासपोर्ट जोड़ें" विकल्प दे सकती है. जारी करने वाली कंपनी, OpenID4VCI क्रेडेंशियल ऑफ़र का अनुरोध करने के लिए, Credential Manager issuance API को कॉल करती है. इस तरह के अनुरोधों को मैनेज करने के लिए, होल्डर को सबसे पहले Credential Manager के साथ इंटिग्रेट करना होगा, ताकि वह अपना मेटाडेटा रजिस्टर कर सके. Credential Manager, उपयोगकर्ता को चुनने के लिए काम के विकल्प दिखाएगा. उपयोगकर्ता के होल्डर का विकल्प चुनने के बाद, होल्डर ऐप्लिकेशन को शुरू किया जाएगा. इसके बाद, जारी करने की प्रोसेस को पूरा करने के लिए ज़रूरी चरणों को पूरा किया जा सकता है.
- होल्डर से शुरू किया गया फ़्लो: उपयोगकर्ता, होल्डर ऐप्लिकेशन से वीडीसी जोड़ने का अनुरोध करता है. उदाहरण के लिए, होल्डर "अपना पासपोर्ट जोड़ें" बटन दिखा सकता है. इस मामले में, होल्डर अपने पास मौजूद जारी करने वाले की सूची और मेटाडेटा को बनाए रखता है. इस फ़ंक्शन को पूरा करने के लिए, इसे Android Credential Manager के साथ इंटिग्रेट करने की ज़रूरत नहीं है.
Holder API के साथ क्रेडेंशियल कैसे काम करते हैं, इस बारे में ज़्यादा जानने के लिए, डिजिटल क्रेडेंशियल सेव करने के बारे में जानकारी लेख पढ़ें.
Android वर्शन के साथ काम करने की सुविधा
Holder API, Android 6 (एपीआई लेवल 23) और इसके बाद के वर्शन पर काम करता है.
लागू करना
Credential Manager 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 और क्रेडेंशियल जारी करने वाले की ओर से भेजा गया क्रेडेंशियल ऑफ़र मिलता है. इससे यह तय होता है कि Credential Manager के यूज़र इंटरफ़ेस (यूआई) पर कौनसी एंट्री दिखेंगी. मैचर का उदाहरण देखने के लिए, ओपन सोर्स के उदाहरण के तौर पर मौजूद wallet app देखें.
पास जारी करने का अनुरोध मैनेज करना
इसके बाद, जब उपयोगकर्ता क्रेडेंशियल बनाने का विकल्प चुनता है, तो वॉलेट को उसे मैनेज करना होगा. सैंपल वॉलेट में दिखाए गए तरीके से, ऐसी गतिविधि तय करें जो 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()
कॉन्टेक्स्ट में क्रेडेंशियल रिस्पॉन्स दिखाने का पूरा उदाहरण देखने के लिए, सैंपल के तौर पर मिला ऐप्लिकेशन देखें.