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

À partir d'Android 15 bêta 2, associé à androidx.credentials:1.5.0-alpha01, les développeurs peuvent associer des vues spécifiques telles que les champs d'identifiant ou de mot de passe aux 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 entre les fournisseurs et affichés dans les UI de saisie automatique, telles que les suggestions intégrées au clavier ou les suggestions dans un menu déroulant. 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 appropriés.

La bibliothèque androidx.credentials Jetpack est le point de terminaison recommandé pour les développeurs pour cette fonctionnalité.

Illustration montrant des identifiants dans les résultats de saisie automatique
Figure 1:Résultats de la saisie automatique avec des identifiants utilisant un mot de passe, une clé d'accès et Se connecter 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. La gestion des réponses est la même, que la réponse provienne de l'appel d'API getCredential ou de PendingGetCredentialRequest, 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 sélecteur du Gestionnaire d'identifiants s'affiche.

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 getCredRequest sur des vues pertinentes (telles que username, password) pour activer les résultats des identifiants dans le remplissage 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;
                       }
               )