Credential Manager - Holder API

क्रेडेंशियल मैनेजर - होल्डर 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-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" }

क्रेडेंशियल मैनेजर में क्रेडेंशियल रजिस्टर करना

वॉलेट को क्रेडेंशियल का मेटाडेटा रजिस्टर करना होगा, ताकि क्रेडेंशियल मैनेजर अनुरोध मिलने पर उन्हें फ़िल्टर कर सके और क्रेडेंशियल सिलेक्टर में दिखा सके.

क्रेडेंशियल मैनेजर में डिजिटल क्रेडेंशियल का यूज़र इंटरफ़ेस (यूआई) दिखाने वाली इमेज
पहली इमेज. डिजिटल क्रेडेंशियल का यूज़र इंटरफ़ेस (यूआई).

क्रेडेंशियल मैनेजर सिलेक्टर का यूज़र इंटरफ़ेस (यूआई)

इस मेटाडेटा का फ़ॉर्मैट, RegisterCredentialsRequest में पास किया जाता है. [RegistryManager][1] बनाएं और क्रेडेंशियल रजिस्टर करें:

इस उदाहरण में, मेटाडेटा को क्रेडेंशियल की एंट्री वाले डेटाबेस से इकट्ठा किया गया है. आपको हमारे सैंपल वॉलेट में रेफ़रंस मिल सकता है, जो ऐप्लिकेशन लोड होने पर मेटाडेटा को रजिस्टर करता है. आने वाले समय में, Jetpack API की मदद से क्रेडेंशियल डेटाबेस को कॉम्पोज़ किया जा सकेगा. इसके बाद, क्रेडेंशियल के मेटाडेटा को अच्छी तरह से तय किए गए डेटा स्ट्रक्चर के तौर पर रजिस्टर किया जा सकता है.

रजिस्ट्री, डिवाइस के रीबूट होने पर भी बनी रहती है. एक ही आईडी और टाइप की रजिस्ट्री को फिर से रजिस्टर करने पर, रजिस्ट्री का पिछला रिकॉर्ड बदल जाएगा. इसलिए, आपको सिर्फ़ तब फिर से रजिस्टर करना होगा, जब आपके क्रेडेंशियल का डेटा बदल गया हो.

ज़रूरी नहीं: मैच करने वाला फ़ंक्शन बनाना

क्रेडेंशियल मैनेजर, प्रोटोकॉल के हिसाब से काम नहीं करता. यह मेटाडेटा रजिस्ट्री को एक गहरे रंग के ब्लॉब के तौर पर इस्तेमाल करता है और इसके कॉन्टेंट की पुष्टि नहीं करता. इसलिए, वॉलेट को मैचर उपलब्ध कराना होगा. यह एक ऐसी बाइनरी है जिसे चलाया जा सकता है. यह वॉलेट का डेटा प्रोसेस कर सकती है और आने वाले अनुरोध के आधार पर डिसप्ले मेटाडेटा जनरेट कर सकती है. क्रेडेंशियल मैनेजर, मैचर को सैंडबॉक्स एनवायरमेंट में चलाएगा. इसके लिए, नेटवर्क या डिस्क का ऐक्सेस नहीं लिया जाएगा. इससे, उपयोगकर्ता को यूज़र इंटरफ़ेस (यूआई) रेंडर करने से पहले, वॉलेट में कोई भी जानकारी लीक नहीं होगी.

Credential Manager API, लोकप्रिय प्रोटोकॉल के लिए मैचर उपलब्ध कराएगा. फ़िलहाल, यह OpenID4VP के लिए उपलब्ध है. इसे अभी आधिकारिक तौर पर रिलीज़ नहीं किया गया है. इसलिए, फ़िलहाल OpenID4VP v24 प्रोटोकॉल के लिए, हमारे सैंपल मैचर का इस्तेमाल करें.

चुने गए क्रेडेंशियल को मैनेज करना

इसके बाद, जब उपयोगकर्ता कोई क्रेडेंशियल चुनता है, तो वॉलेट को उसे मैनेज करना होगा. आपके पास ऐसी गतिविधि तय करने का विकल्प है जो 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()

क्रेडेंशियल के रिस्पॉन्स को कॉन्टेक्स्ट में दिखाने का उदाहरण देखने के लिए, सैंपल ऐप्लिकेशन देखें.