অ্যান্ড্রয়েড ১৫-তে, ক্রেডেনশিয়াল ম্যানেজার ক্রেডেনশিয়াল তৈরি এবং পুনরুদ্ধারের জন্য একটি একক ট্যাপ ফ্লো সমর্থন করে। এই ফ্লোতে, ক্রেডেনশিয়াল তৈরি করা হচ্ছে বা ব্যবহার করা হচ্ছে তার তথ্য সরাসরি বায়োমেট্রিক প্রম্পটে প্রদর্শিত হয়, আরও বিকল্পের জন্য একটি এন্ট্রিপয়েন্ট সহ। এই সরলীকৃত প্রক্রিয়াটি আরও দক্ষ এবং সুবিন্যস্ত ক্রেডেনশিয়াল তৈরি এবং পুনরুদ্ধার প্রক্রিয়া তৈরি করে।
আবশ্যকতা:
- ব্যবহারকারীর ডিভাইসে বায়োমেট্রিক্স সেট আপ করা হয়েছে এবং ব্যবহারকারী অ্যাপ্লিকেশনগুলিতে প্রমাণীকরণের জন্য তাদের অনুমতি দেয়।
- সাইন-ইন প্রবাহের জন্য, এই বৈশিষ্ট্যটি শুধুমাত্র একক অ্যাকাউন্টের ক্ষেত্রেই সক্ষম, এমনকি যদি সেই অ্যাকাউন্টের জন্য একাধিক শংসাপত্র (যেমন পাসকি এবং পাসওয়ার্ড) উপলব্ধ থাকে।
পাসকি তৈরির প্রবাহে একবার ট্যাপ করার সুবিধা চালু করুন
এই পদ্ধতির তৈরির ধাপগুলি বিদ্যমান শংসাপত্র তৈরির প্রক্রিয়ার সাথে মিলে যায়। আপনার 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.authenticationError
// 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 এর সাথে সম্পর্কিত একটি ত্রুটি বার্তাও থাকবে যা একটি UI-তে প্রদর্শিত হতে পারে।
একইভাবে, 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.authenticationError
// Process the error
}
// Other logic...