सिंगल टैप करके पासकी बनाने और बायोमेट्रिक प्रॉम्प्ट की मदद से साइन-इन करने की सुविधा इंटिग्रेट करें

Android 15 पर, क्रेडेंशियल मैनेजर पर सिर्फ़ एक टैप में क्रेडेंशियल को ऐक्सेस किया जा सकता है बनाना और वापस पाना. इस फ़्लो में, क्रेडेंशियल की जानकारी बनाया गया हो या उसका इस्तेमाल किया जा रहा हो, उसे सीधे बायोमेट्रिक प्रॉम्प्ट में दिखाया जाता है. साथ ही, एंट्रीपॉइंट भी बना सकते हैं. यह आसान प्रोसेस, लोगों को क्रेडेंशियल बनाने और वापस पाने की प्रक्रिया को आसान और बेहतर बनाया है.

ज़रूरी शर्तें:

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

पासकी बनाने के फ़्लो पर एक बार टैप करके चालू करें

क्रेडेंशियल बनाने के इस तरीके के चरण, क्रेडेंशियल बनाने की मौजूदा प्रोसेस से मेल खाते हैं. अपने BeginCreatePublicKeyCredentialRequest में, इसका इस्तेमाल करें अगर अनुरोध पासकी के लिए किया गया है, तो उसे प्रोसेस करने के लिए handleCreatePasskeyQuery().

is BeginCreatePublicKeyCredentialRequest -> {
  Log.i(TAG, "Request is passkey type")
  return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}

अपने handleCreatePasskeyQuery() में, BiometricPromptData को इनके साथ शामिल करें CreateEntry क्लास:

val createEntry = CreateEntry(
  // Additional properties...
  biometricPromptData = BiometricPromptData(
    allowedAuthenticators = allowedAuthenticator
  )
)

क्रेडेंशियल देने वालों को allowedAuthenticator प्रॉपर्टी साफ़ तौर पर सेट करनी चाहिए BiometricPromptData इंस्टेंस में. यदि यह प्रॉपर्टी सेट नहीं है, तो मान डिफ़ॉल्ट रूप से 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 है या नहीं. अगर हां, तो अपने बायोमेट्रिक्स को पुष्टि करें. यह गेट ऑपरेशन के तरीके जैसा है:

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...