Android 15 पर, Credential Manager में क्रेडेंशियल बनाने और वापस पाने के लिए, एक टैप वाला फ़्लो काम करता है. इस फ़्लो में, बनाए जा रहे या इस्तेमाल किए जा रहे क्रेडेंशियल की जानकारी, सीधे बायोमेट्रिक प्रॉम्प्ट में दिखती है. साथ ही, इसमें ज़्यादा विकल्पों के लिए एंट्री पॉइंट भी दिखता है. इस आसान प्रोसेस से, क्रेडेंशियल बनाने और वापस पाने की प्रोसेस ज़्यादा बेहतर और आसान हो जाती है.
ज़रूरी शर्तें:
- उपयोगकर्ता के डिवाइस पर बायोमेट्रिक्स सेट अप किए गए हों और उपयोगकर्ता ने ऐप्लिकेशन में पुष्टि करने के लिए, उन्हें अनुमति दी हो.
- साइन इन फ़्लो के लिए, यह सुविधा सिर्फ़ एक खाते के लिए चालू होती है. भले ही, उस खाते के लिए पासकी और पासवर्ड जैसे कई क्रेडेंशियल उपलब्ध हों.
पासकी बनाने के फ़्लो में, एक बार टैप करने की सुविधा चालू करना
क्रेडेंशियल बनाने के इस तरीके के चरण, क्रेडेंशियल बनाने की मौजूदा प्रोसेस से मेल खाते हैं. अगर अनुरोध पासकी के लिए है, तो उसे प्रोसेस करने के लिए BeginCreatePublicKeyCredentialRequest
में, handleCreatePasskeyQuery()
का इस्तेमाल करें.
is BeginCreatePublicKeyCredentialRequest -> {
Log.i(TAG, "Request is passkey type")
return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}
अपने handleCreatePasskeyQuery()
में, CreateEntry
क्लास के साथ BiometricPromptData
शामिल करें:
val createEntry = CreateEntry(
// Additional properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
क्रेडेंशियल उपलब्ध कराने वाली कंपनियों को BiometricPromptData
इंस्टेंस में allowedAuthenticator
प्रॉपर्टी को साफ़ तौर पर सेट करना चाहिए. अगर इस प्रॉपर्टी को सेट नहीं किया गया है, तो वैल्यू डिफ़ॉल्ट रूप से DEVICE_WEAK
पर सेट हो जाती है. अगर ज़रूरी हो, तो अपने इस्तेमाल के उदाहरण के लिए, वैकल्पिक cryptoObject
प्रॉपर्टी सेट करें.
पासकी से साइन इन करने के फ़्लो में, एक बार टैप करने की सुविधा चालू करना
पासकी बनाने के फ़्लो की तरह ही, यह उपयोगकर्ता के साइन इन को मैनेज करने के लिए मौजूदा सेटअप का पालन करेगा. पुष्टि के अनुरोध के बारे में काम की जानकारी इकट्ठा करने के लिए, BeginGetPublicKeyCredentialOption
में जाकर populatePasskeyData()
का इस्तेमाल करें:
is BeginGetPublicKeyCredentialOption -> {
// ... other logic
populatePasskeyData(
origin,
option,
responseBuilder,
autoSelectEnabled,
allowedAuthenticator
)
// ... other logic as needed
}
CreateEntry
की तरह ही, BiometricPromptData
इंस्टेंस को PublicKeyCredentialEntry
इंस्टेंस पर सेट किया गया है. अगर साफ़ तौर पर सेट नहीं किया गया है, तो allowedAuthenticator
डिफ़ॉल्ट रूप से BIOMETRIC_WEAK
पर सेट हो जाता है.
PublicKeyCredentialEntry(
// other properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
क्रेडेंशियल डालने के विकल्प को हैंडल करना
पासकी बनाने या
साइन इन के दौरान पासकी चुनने के लिए, क्रेडेंशियल डालने के विकल्प को मैनेज करते समय, PendingIntentHandler's
retrieveProviderCreateCredentialRequest
या
retrieveProviderGetCredentialRequest
को ज़रूरत के हिसाब से कॉल करें. ये ऐसे ऑब्जेक्ट दिखाते हैं जिनमें, डेटा उपलब्ध कराने वाली कंपनी के लिए ज़रूरी मेटाडेटा होता है. उदाहरण के लिए, पासकी बनाने के लिए एंट्री चुनते समय, अपने कोड को इस तरह अपडेट करें:
val createRequest = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
if (createRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = createRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (createRequest.callingRequest is CreatePublicKeyCredentialRequest) {
val publicKeyRequest: CreatePublicKeyCredentialRequest =
createRequest.callingRequest as CreatePublicKeyCredentialRequest
if (biometricPromptResult == null) {
// Do your own authentication flow, if needed
}
else if (biometricPromptResult.isSuccessful) {
createPasskey(
publicKeyRequest.requestJson,
createRequest.callingAppInfo,
publicKeyRequest.clientDataHash,
accountId
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...
}
इस उदाहरण में, बायोमेट्रिक फ़्लो के काम करने के बारे में जानकारी दी गई है. इसमें क्रेडेंशियल के बारे में अन्य जानकारी भी होती है. अगर फ़्लो पूरा नहीं होता है, तो फ़ैसले लेने के लिए biometricPromptResult.authenticationError
में मौजूद गड़बड़ी कोड का इस्तेमाल करें.
biometricPromptResult.authenticationError.errorCode
के हिस्से के तौर पर दिखाए गए गड़बड़ी कोड, androidx.biometric लाइब्रेरी में बताए गए गड़बड़ी कोड जैसे ही होते हैं. जैसे,
androidx.biometric.BiometricPrompt.NO_SPACE,
androidx.biometric.BiometricPrompt.UNABLE_TO_PROCESS, androidx.biometric.BiometricPrompt.ERROR_TIMEOUT वगैरह. authenticationError
में, errorCode
से जुड़ा गड़बड़ी का मैसेज भी होगा. इसे यूज़र इंटरफ़ेस (यूआई) पर दिखाया जा सकता है.
इसी तरह, retrieveProviderGetCredentialRequest
के दौरान मेटाडेटा निकालें.
देखें कि आपका बायोमेट्रिक फ़्लो null
है या नहीं. अगर हां, तो पुष्टि करने के लिए अपने बायोमेट्रिक डेटा को कॉन्फ़िगर करें. यह उसी तरह है जिस तरह get ऑपरेशन को इंस्ट्रूमेंट किया जाता है:
val getRequest =
PendingIntentHandler.retrieveProviderGetCredentialRequest(intent)
if (getRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = getRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (biometricPromptResult == null)
{
// Do your own authentication flow, if necessary
} else if (biometricPromptResult.isSuccessful) {
Log.i(TAG, "The response from the biometricPromptResult was ${biometricPromptResult.authenticationResult.authenticationType}")
validatePasskey(
publicKeyRequest.requestJson,
origin,
packageName,
uid,
passkey.username,
credId,
privateKey
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...