دمج "مدير بيانات الاعتماد" مع ميزة "الملء التلقائي"

بدءًا من الإصدار التجريبي 2 من Android 15 والمقترن بـ androidx.certifieds:1.5.0-alpha01، يمكن للمطوّرين ربط طرق عرض معيّنة، مثل حقول اسم المستخدم أو كلمة المرور، عبر طلبات "مدير بيانات الاعتماد". عندما يشدّد المستخدم التركيز على أحد هذه العروض، يتم إرسال الطلب المقابل إلى "مدير المستندات المُعتمَدة". ويتم تجميع بيانات الاعتماد الناتجة على مستوى جميع مقدّمي الخدمات وعرضها في واجهات مستخدم الملء التلقائي، مثل الاقتراحات المضمّنة في لوحة المفاتيح أو الاقتراحات من القوائم المنسدلة. يمكن استخدام هذه الميزة كخيار احتياطي عندما يغلِق المستخدمون عن طريق الخطأ محدد حساب "مدير بيانات الاعتماد" ثم ينقرون على الحقول ذات الصلة.

مكتبة Jetpack androidx.credentials هي نقطة النهاية المفضّلة التي يمكن للمطوّرين استخدامها مع هذه الميزة.

صورة توضيحية تعرض بيانات الاعتماد في نتائج الملء التلقائي
الشكل 1: نتائج الملء التلقائي لبيانات الاعتماد باستخدام كلمة المرور ومفتاح المرور وميزة "تسجيل الدخول باستخدام حساب Google"

التنفيذ

لاستخدام "مدير بيانات الاعتماد" لعرض بيانات الاعتماد في نتائج الملء التلقائي، استخدِم التنفيذ العادي لإنشاء GetCredentialRequest، ثم اضبطه على طرق العرض ذات الصلة. تكون طريقة معالجة الردّ متماثلة، سواء كان الردّ يأتي من طلب البيانات من واجهة برمجة التطبيقات getCredential أو PendingGetCredentialRequest، كما هو موضح في المثال التالي.

أولاً، أنشئ GetCredentialRequest:

Kotlin

// 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)
)

Java

// Retrieves the user's saved password for your app.
GetPasswordOption getPasswordOption = new GetPasswordOption();

// Get a passkey from the user's public key credential provider.
GetPublicKeyCredentialOption getPublicKeyCredentialOption =
    new GetPublicKeyCredentialOption(requestJson);

GetCredentialRequest getCredRequest = new GetCredentialRequest(
    Arrays.asList(getPasswordOption, getPublicKeyCredentialOption)
);

بعد ذلك، استخدِم واجهة برمجة التطبيقات getCredential. يؤدي ذلك إلى عرض أداة اختيار "مدير بيانات الاعتماد".

Kotlin

coroutineScope.launch {
    try {
        val result = credentialManager.getCredential(
            context = activityContext, // Use an activity-based context.
            request = getCredRequest
        )
        handleSignIn(result);
    } catch (GetCredentialException e) {
        handleFailure(e);
    }
}

Java

coroutineScope.launch(new CoroutineScopeRunnable() {
    @Override
    public void run(@NonNull CoroutineScope scope) {
        try {
            GetCredentialResponse result = credentialManager.getCredential(
                activityContext, // Use an activity-based context.
                getCredRequest
            );
            handleSignIn(result);
        } catch (GetCredentialException e) {
            handleFailure(e);
        }
    }
});

أخيرًا، فعِّل تجربة الملء التلقائي. اضبط getCredRequest على طرق العرض ذات الصلة (مثل username, password) لتفعيل نتائج بيانات الاعتماد في الملء التلقائي عندما يتفاعل المستخدم مع طرق العرض هذه.

Kotlin

import androidx.credentials.PendingGetCredentialRequest

usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest) { response -> handleSignIn(response)
}

passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest) { response -> handleSignIn(response)
}

Java

import androidx.credentials.CredentialManagerViewHandler;
import androidx.credentials.PendingGetCredentialRequest;

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               usernameEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               passwordEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )