Intégrer le Gestionnaire d'identifiants à la saisie automatique

À partir de la version bêta 2 d'Android 15, associée à androidx.credentials:1.5.0-alpha01, les développeurs peuvent associer des vues spécifiques, comme nom d'utilisateur ou mot de passe avec les requêtes du Gestionnaire d'identifiants. Lorsque l'utilisateur met en surbrillance l'une de ces vues, la requête correspondante est envoyée au Gestionnaire d'identifiants. Les identifiants obtenus sont agrégés pour l'ensemble des fournisseurs et affichés dans les UI de saisie automatique, comme les suggestions intégrées au clavier ou les suggestions des menus déroulants. Cette fonctionnalité peut être utilisée comme solution de secours lorsque les utilisateurs ignorent accidentellement le sélecteur de compte du Gestionnaire d'identifiants, puis appuient sur les champs concernés.

La bibliothèque Jetpack androidx.credentials est le point de terminaison privilégié pour développeurs à utiliser pour cette fonctionnalité.

Illustration montrant des identifiants dans les résultats de saisie automatique
Figure 1:Résultats de la saisie automatique des identifiants à l'aide d'un mot de passe, d'une clé d'accès et d'une Connectez-vous avec Google.

Implémentation

Pour utiliser le Gestionnaire d'identifiants pour afficher les identifiants dans les résultats de saisie semi-automatique, utilisez l'implémentation standard pour créer un GetCredentialRequest, puis définissez-le sur les vues pertinentes. Le traitement de la réponse est identique, que la réponse vient de l'appel d'API getCredential ou de PendingGetCredentialRequest, comme comme illustré dans l'exemple suivant.

Commencez par créer 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)
);

Ensuite, appelez l'API getCredential. Le Gestionnaire d'identifiants s'affiche sélecteur.

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

Enfin, activez l'expérience de saisie automatique. Définissez le paramètre getCredRequest sur les valeurs appropriées affichages (tels que username, password) pour activer les résultats des identifiants dans la saisie automatique lorsque l'utilisateur interagit avec ces vues.

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