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

بدءًا من الإصدار التجريبي 2 من Android 15، مع استخدام الإصدار androidx.credentials: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;
                       }
               )