क्रेडेंशियल मैनेजर - होल्डर API की मदद से, Android ऐप्लिकेशन, डिजिटल क्रेडेंशियल को मैनेज कर सकते हैं और पुष्टि करने वालों को दिखा सकते हैं.
शुरू करें
Credential Manager - Holder API का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन मॉड्यूल की बिल्ड स्क्रिप्ट में ये डिपेंडेंसी जोड़ें:
// 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" }
क्रेडेंशियल मैनेजर में क्रेडेंशियल रजिस्टर करना
वॉलेट को क्रेडेंशियल मेटाडेटा रजिस्टर करना होता है, ताकि Credential Manager अनुरोध मिलने पर, क्रेडेंशियल सिलेक्टर में उन्हें फ़िल्टर करके दिखा सके.
 
  Credential Manager Selector का यूज़र इंटरफ़ेस (यूआई)
इस मेटाडेटा का फ़ॉर्मैट, RegisterCredentialsRequest में पास किया जाता है.
[RegistryManager][1] बनाएं और क्रेडेंशियल रजिस्टर करें:
इस उदाहरण में, मेटाडेटा को क्रेडेंशियल की एंट्री के डेटाबेस से कंपाइल किया गया है. आपको हमारे सैंपल वॉलेट में एक रेफ़रंस मिलेगा. यह ऐप्लिकेशन लोड होने पर मेटाडेटा रजिस्टर करता है. आने वाले समय में, Jetpack API की मदद से क्रेडेंशियल डेटाबेस कंपोज़िशन का इस्तेमाल किया जा सकेगा. उस समय, क्रेडेंशियल मेटाडेटा को अच्छी तरह से परिभाषित किए गए डेटा स्ट्रक्चर के तौर पर रजिस्टर किया जा सकता है.
रजिस्ट्री, डिवाइस रीबूट होने पर भी बनी रहती है. एक ही आईडी और टाइप वाली रजिस्ट्री को फिर से रजिस्टर करने पर, पिछली रजिस्ट्री का रिकॉर्ड ओवरराइट हो जाता है. इसलिए, क्रेडेंशियल डेटा में बदलाव होने पर ही दोबारा रजिस्टर करें.
ज़रूरी नहीं: मैच करने वाला कोई फ़ंक्शन बनाएं
Credential Manager, प्रोटोकॉल से जुड़ा नहीं है. यह मेटाडेटा रजिस्ट्री को एक अपारदर्शी ब्लॉब के तौर पर देखता है. साथ ही, इसके कॉन्टेंट की पुष्टि या जांच नहीं करता. इसलिए, वॉलेट को एक मैच करने वाला टूल उपलब्ध कराना होगा. यह एक ऐसा बाइनरी फ़ाइल है जो वॉलेट के डेटा को प्रोसेस कर सकती है. साथ ही, आने वाले अनुरोध के आधार पर डिसप्ले मेटाडेटा जनरेट कर सकती है. क्रेडेंशियल मैनेजर, मैच करने वाले टूल को सैंडबॉक्स एनवायरमेंट में चलाता है. इसमें नेटवर्क या डिस्क ऐक्सेस नहीं होता, ताकि यूज़र इंटरफ़ेस (यूआई) को उपयोगकर्ता के लिए रेंडर करने से पहले, वॉलेट में कोई भी जानकारी लीक न हो.
Credential Manager API, लोकप्रिय प्रोटोकॉल के लिए मैच करने वाले टूल उपलब्ध कराएगा. फ़िलहाल, OpenID4VP के लिए. इसे अभी आधिकारिक तौर पर रिलीज़ नहीं किया गया है. इसलिए, फ़िलहाल OpenID4VP प्रोटोकॉल के लिए, हमारे सैंपल मैचर का इस्तेमाल करें.
चुने गए क्रेडेंशियल को मैनेज करना
इसके बाद, वॉलेट को यह मैनेज करना होगा कि उपयोगकर्ता ने क्रेडेंशियल कब चुना है. androidx.credentials.registry.provider.action.GET_CREDENTIAL इंटेंट फ़िल्टर को सुनने वाली कोई गतिविधि तय की जा सकती है.
हमारे सैंपल वॉलेट में इस प्रोसेस के बारे में बताया गया है.
गतिविधि को लॉन्च करने वाले इंटेंट में, पुष्टि करने वाले का अनुरोध और कॉल करने वाले का ऑरिजिन शामिल होता है. इसे PendingIntentHandler.retrieveProviderGetCredentialRequest फ़ंक्शन की मदद से निकाला जा सकता है. एपीआई, ProviderGetCredentialRequest दिखाता है. इसमें पुष्टि करने वाले व्यक्ति के अनुरोध से जुड़ी सभी जानकारी होती है. इसके तीन मुख्य कॉम्पोनेंट हैं:
- जिस ऐप्लिकेशन ने अनुरोध किया है. getCallingAppInfoकी मदद से, इसे वापस पाया जा सकता है.
- चुना गया क्रेडेंशियल. selectedEntryIdएक्सटेंशन के तरीके से, आपको इस बारे में जानकारी मिल सकती है कि उपयोगकर्ता ने किस उम्मीदवार को चुना है. यह उस क्रेडेंशियल आईडी से मेल खाएगा जिसे आपने रजिस्टर किया है.
- पुष्टि करने वाले व्यक्ति ने कोई खास अनुरोध किया है. यह जानकारी, getCredentialOptionsतरीके से मिल सकती है. इस मामले में, आपको इस सूची मेंGetDigitalCredentialOptionदिखेगा. इसमें डिजिटल क्रेडेंशियल का अनुरोध शामिल होगा.
आम तौर पर, पुष्टि करने वाला व्यक्ति डिजिटल क्रेडेंशियल पेश करने का अनुरोध करता है, ताकि आप इसे इस सैंपल कोड के साथ प्रोसेस कर सकें:
request.credentialOptions.forEach { option ->
    if (option is GetDigitalCredentialOption) {
        Log.i(TAG, "Got DC request: ${option.requestJson}")
        processRequest(option.requestJson)
    }
}
इसका उदाहरण, हमारे सैंपल वॉलेट में देखा जा सकता है.
Wallet ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) रेंडर करना
क्रेडेंशियल चुनने के बाद, वॉलेट खुल जाता है और उपयोगकर्ता को इसके यूज़र इंटरफ़ेस (यूआई) पर ले जाया जाता है. इस सैंपल में, यह बायोमेट्रिक प्रॉम्प्ट है.
क्रेडेंशियल का जवाब दिखाता है
जब Wallet, नतीजे को वापस भेजने के लिए तैयार हो जाए, तब क्रेडेंशियल के जवाब के साथ गतिविधि पूरी करके ऐसा किया जा सकता है:
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()
संदर्भ के हिसाब से क्रेडेंशियल रिस्पॉन्स देने का तरीका जानने के लिए, सैंपल ऐप्लिकेशन देखें.
