بدءًا من الإصدار التجريبي الثاني من Android 15، وبالاقتران مع androidx.credentials:1.5.0-alpha01، يمكن للمطوّرين ربط طرق عرض معيّنة، مثل حقول اسم المستخدم أو كلمة المرور، بطلبات Credential Manager. عندما يركّز المستخدم على أحد طرق العرض هذه، يتم إرسال الطلب المقابل إلى Credential Manager. يتم تجميع بيانات الاعتماد الناتجة من جميع مقدّمي الخدمات وعرضها في واجهات مستخدم الملء التلقائي، مثل الاقتراحات المضمّنة في لوحة المفاتيح أو الاقتراحات المنسدلة. يمكن استخدام هذه الميزة كحل بديل عندما يرفض المستخدمون عن طريق الخطأ أداة اختيار الحساب في Credential Manager ثم ينقرون على الحقول ذات الصلة.
تُعدّ مكتبة Jetpack androidx.credentials نقطة النهاية المفضّلة للمطوّرين لاستخدام هذه الميزة.
الشكل 1: نتائج الملء التلقائي لبيانات الاعتماد باستخدام كلمة المرور ومفتاح المرور وميزة "تسجيل الدخول باستخدام حساب Google"
التنفيذ
لاستخدام Credential Manager لعرض بيانات الاعتماد في نتائج الملء التلقائي، استخدِم
التنفيذ العادي لإنشاء GetCredentialRequest ثم اضبطه
على طرق العرض ذات الصلة. تتم معالجة الاستجابة بالطريقة نفسها، سواء كانت الاستجابة
ناتجة عن طلب بيانات من واجهة برمجة التطبيقات getCredential أو PendingGetCredentialRequest، كما
هو موضّح في المثال التالي.
أولاً، أنشئ GetCredentialRequest:
// Retrieves the user's saved password for your app.
val getPasswordOption = GetPasswordOption()
// Get a passkey from the user's public key credential provider.
val getPublicKeyCredentialOption = GetPublicKeyCredentialOption(
requestJson = requestJson
)
val getCredRequest = GetCredentialRequest(
listOf(getPasswordOption, getPublicKeyCredentialOption)
)
بعد ذلك، اطلب واجهة برمجة التطبيقات getCredential. يؤدي ذلك إلى عرض أداة اختيار Credential Manager.
coroutineScope {
try {
val result = credentialManager.getCredential(
context = activityContext, // Use an activity-based context.
request = getCredRequest
)
handleSignIn(result)
} catch (e: GetCredentialException) {
handleFailure(e)
}
}
أخيرًا، فعِّل تجربة الملء التلقائي. اضبط السمة getCredRequest على طرق العرض ذات الصلة (مثل username, password) لتفعيل نتائج بيانات الاعتماد في ميزة "الملء التلقائي" عندما يتفاعل المستخدم مع طرق العرض هذه.
usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}
passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}