Credential Manager in Autofill einbinden

Ab Android 15 Beta 2 können Entwickler mit androidx.credentials:1.5.0-alpha01 bestimmte Ansichten wie Nutzernamen- oder Passwortfelder mit Anfragen des Anmeldedaten-Managers verknüpfen. Wenn der Nutzer den Fokus auf eine dieser Ansichten legt, wird die entsprechende Anfrage an den Anmeldedaten-Manager gesendet. Die Anmeldedaten werden anbieterübergreifend zusammengefasst und in Autofill-UIs wie Tastatur-Inline-Vorschlägen oder Drop-down-Vorschlägen angezeigt. Diese Funktion kann als Fallback verwendet werden, wenn Nutzer die Kontoauswahl des Anmeldedaten-Managers versehentlich schließen und dann auf die entsprechenden Felder tippen.

Die Jetpack-Bibliothek androidx.credentials ist der bevorzugte Endpunkt für Entwickler, die diese Funktion verwenden möchten.

Abbildung, die Anmeldedaten in Autofill-Ergebnissen zeigt
Abbildung 1:Autofill-Ergebnisse mit Anmeldedaten mit Passwort, Passkey und „Über Google anmelden“

Implementierung

Wenn Sie mit dem Anmeldedaten-Manager Anmeldedaten in Autofill-Ergebnissen anzeigen lassen möchten, erstellen Sie mit der Standardimplementierung ein GetCredentialRequest und legen Sie es dann auf die entsprechenden Ansichten fest. Die Antwort wird gleich behandelt, unabhängig davon, ob sie vom getCredential API-Aufruf oder von PendingGetCredentialRequest stammt, wie im folgenden Beispiel gezeigt.

Erstellen Sie zuerst eine 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)
);

Rufen Sie als Nächstes die getCredential API auf. Daraufhin wird die Auswahl für den Anmeldedatenmanager angezeigt.

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

Aktivieren Sie abschließend die Funktion zum automatischen Ausfüllen. Legen Sie die getCredRequest auf relevante Ansichten wie username, password fest, um das automatische Ausfüllen von Anmeldedaten zu aktivieren, wenn der Nutzer mit diesen Ansichten interagiert.

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