שילוב של 'מנהל פרטי הכניסה' עם המילוי האוטומטי

החל מגרסה Android 15 Beta 2, בשילוב עם androidx.credentials:1.5.0-alpha01, מפתחים יכולים לקשר תצוגות ספציפיות, כמו שדות של שם משתמש או סיסמה, לבקשות של מנהל פרטי הכניסה. כשהמשתמש מתמקד באחת מהתצוגות האלה, הבקשה המתאימה נשלחת למנהל פרטי הכניסה. פרטי הכניסה שמתקבלים נצברים מכל הספקים ומוצגים בממשקי משתמש של מילוי אוטומטי, כמו הצעות במקלדת או הצעות בתפריט הנפתח. אפשר להשתמש בתכונה הזו כחלופה במקרה שמשתמשים סוגרים בטעות את הבורר של חשבון Credential Manager ואז מקישים על השדות הרלוונטיים.

ספריית Jetpack androidx.credentials היא נקודת הקצה המועדפת למפתחים לשימוש בתכונה הזו.

איור שבו מוצגים פרטי הכניסה בתוצאות המילוי האוטומטי
איור 1: מילוי אוטומטי של תוצאות עם פרטי כניסה באמצעות סיסמה, מפתח גישה וכניסה באמצעות חשבון Google.

הטמעה

כדי להשתמש ב'מנהל פרטי הכניסה' להצגת פרטי כניסה בתוצאות של מילוי אוטומטי, צריך להשתמש בהטמעה הרגילה כדי ליצור GetCredentialRequest ולאחר מכן להגדיר אותו לתצוגות הרלוונטיות. אופן הטיפול בתשובה זהה, בין שהיא מגיעה מהקריאה ל-API 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)
);

בשלב הבא, קוראים ל-API של getCredential. יוצג הבורר של Credential Manager.

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;
                       }
               )