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

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

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

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

הטמעה

כדי להשתמש ב-Credential Manager כדי להציג פרטי כניסה בתוצאות של מילוי אוטומטי, משתמשים בהטמעה הרגילה כדי ליצור 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;
                       }
               )