Integrare Gestore delle credenziali con la compilazione automatica

A partire da Android 15 Beta 2, abbinato a androidx.credentials:1.5.0-alpha01, gli sviluppatori possono collegare visualizzazioni specifiche come campi nome utente o password alle richieste di Gestore delle credenziali. Quando l'utente si concentra su una di queste visualizzazioni, la richiesta corrispondente viene inviata a Credential Manager. Le credenziali risultanti vengono aggregate tra i fornitori e visualizzate nelle UI di compilazione automatica, ad esempio i suggerimenti in linea della tastiera o i suggerimenti del menu a discesa. Questa funzionalità può essere utilizzata come alternativa quando gli utenti chiudono accidentalmente il selettore di account Gestore delle credenziali e poi toccano i campi pertinenti.

La libreria androidx.credentials di Jetpack è l'endpoint preferito per gli sviluppatori da utilizzare per questa funzionalità.

Illustrazione che mostra le credenziali nei risultati di compilazione automatica
Figura 1: compilazione automatica dei risultati con le credenziali utilizzando password, passkey e Accedi con Google.

Implementazione

Per utilizzare Gestore delle credenziali per mostrare le credenziali nei risultati della compilazione automatica, utilizza l'implementazione standard per creare un GetCredentialRequest e impostalo sulle visualizzazioni pertinenti. La gestione della risposta è la stessa, indipendentemente dal fatto che provenga dalla chiamata dell'API getCredential o da PendingGetCredentialRequest, come mostrato nell'esempio seguente.

Innanzitutto, crea un 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)
);

Quindi, chiama l'API getCredential. Viene visualizzato il selettore Gestisci credenziali.

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

Infine, attiva l'esperienza di compilazione automatica. Imposta getCredRequest sulle viste pertinenti (ad esempio username, password) per attivare i risultati delle credenziali nella compilazione automatica quando l'utente interagisce con queste viste.

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