বায়োমেট্রিক প্রম্পট সহ একক ট্যাপ পাসকি তৈরি এবং সাইন-ইন করুন

Android 15-এ, ক্রেডেনশিয়াল ম্যানেজার শংসাপত্র তৈরি এবং পুনরুদ্ধারের জন্য একটি একক ট্যাপ ফ্লো সমর্থন করে। এই প্রবাহে, ক্রেডেনশিয়াল তৈরি করা বা ব্যবহার করা হচ্ছে তার তথ্য সরাসরি বায়োমেট্রিক প্রম্পটে প্রদর্শিত হয়, আরও বিকল্পের জন্য একটি এন্ট্রিপয়েন্ট সহ। এই সরলীকৃত প্রক্রিয়াটি আরও দক্ষ এবং সুবিন্যস্ত শংসাপত্র তৈরি এবং পুনরুদ্ধার প্রক্রিয়া তৈরি করে।

প্রয়োজনীয়তা:

  • বায়োমেট্রিক্স ব্যবহারকারীর ডিভাইসে সেট আপ করা হয়েছে এবং ব্যবহারকারী তাদের অ্যাপ্লিকেশনগুলিতে প্রমাণীকরণের অনুমতি দেয়।
  • সাইন-ইন প্রবাহের জন্য, এই বৈশিষ্ট্যটি শুধুমাত্র একক অ্যাকাউন্ট পরিস্থিতির জন্য সক্ষম করা হয়েছে, এমনকি যদি সেই অ্যাকাউন্টের জন্য একাধিক শংসাপত্র (যেমন পাসকি এবং পাসওয়ার্ড) উপলব্ধ থাকে।

পাসকি তৈরির প্রবাহে একক ট্যাপ সক্ষম করুন

এই পদ্ধতির তৈরির ধাপগুলি বিদ্যমান শংসাপত্র তৈরির প্রক্রিয়ার সাথে মেলে। আপনার 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.PROUNS_PROUNDE ROR_TIMEOUT , এবং অনুরূপ। authenticationError errorCode সাথে যুক্ত একটি ত্রুটি বার্তাও থাকবে যা একটি UI এ প্রদর্শিত হতে পারে।

একইভাবে, 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...