في نظام التشغيل 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_')}>، وما شابه ذلك. سيتضمّن الرمز
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...