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

بدءًا من الإصدار التجريبي 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;
                       }
               )