في Android 15، يتيح Credential Manager إنشاء بيانات الاعتماد واستردادها بنقرة واحدة. في هذا المسار، يتم عرض معلومات بيانات الاعتماد التي يتم إنشاؤها أو استخدامها مباشرةً في "طلب المقاييس الحيوية"، بالإضافة إلى نقطة دخول إلى المزيد من الخيارات. تؤدي هذه العملية المبسّطة إلى إنشاء عملية أكثر كفاءة وسلاسة لإنشاء بيانات الاعتماد واستردادها.
المتطلبات:
- تم إعداد المقاييس الحيوية على جهاز المستخدم وسمح المستخدم باستخدامها للمصادقة في التطبيقات.
- بالنسبة إلى عمليات تسجيل الدخول، يتم تفعيل هذه الميزة في سيناريوهات الحساب الواحد فقط، حتى في حال توفُّر بيانات اعتماد متعددة (مثل مفتاح المرور وكلمة المرور) لهذا الحساب.
تفعيل ميزة النقر مرة واحدة في عمليات إنشاء مفاتيح المرور
تتطابق خطوات إنشاء هذه الطريقة مع عملية إنشاء بيانات الاعتماد الحالية. في 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.authenticationError
// Process the error
}
// Other logic...
}
يحتوي هذا المثال على معلومات حول نجاح عملية المصادقة بالمقاييس الحيوية. ويحتوي أيضًا على معلومات أخرى حول بيانات الاعتماد. إذا تعذّر إكمال العملية، استخدِم رمز الخطأ ضمن biometricPromptResult.authenticationError لاتّخاذ القرارات.
رموز الخطأ التي يتم عرضها كجزء من
biometricPromptResult.authenticationError.errorCode هي رموز الخطأ نفسها
المحدّدة في مكتبة androidx.biometric، مثل
androidx.biometric.BiometricPrompt.ERROR_NO_SPACE وandroidx.biometric.BiometricPrompt.ERROR_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.authenticationError
// Process the error
}
// Other logic...