Credential Manager - Holder API

क्रेडेंशियल मैनेजर - होल्डर API की मदद से, Android ऐप्लिकेशन, पुष्टि करने वालों को डिजिटल क्रेडेंशियल मैनेज और दिखा सकते हैं.

शुरू करें

क्रेडेंशियल मैनेजर - होल्डर एपीआई का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन मॉड्यूल की बिल्ड स्क्रिप्ट में ये डिपेंडेंसी जोड़ें:

// 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-alpha01"

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 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()

कॉन्टेक्स्ट में क्रेडेंशियल का रिस्पॉन्स देने का तरीका जानने के लिए, सैंपल ऐप्लिकेशन देखें.