Stocker les identifiants d'un utilisateur

Une fois que les utilisateurs se sont connectés, ont créé des comptes ou modifié leurs mots de passe, autorisez-les à stocker leurs identifiants pour automatiser la future authentification dans votre application.

Avant de commencer

Configurez un projet Android Studio.

Stocker les identifiants

Créez un objet Credential contenant les informations de connexion d'un utilisateur. Par exemple, pour permettre aux utilisateurs de stocker leurs identifiants après s'être connectés avec leurs mots de passe:

Credential credential = new Credential.Builder(email)
        .setPassword(password)  // Important: only store passwords in this field.
                                // Android autofill uses this value to complete
                                // sign-in forms, so repurposing this field will
                                // likely cause errors.
        .build();

Une fois que les utilisateurs se sont connectés à leur compte Google, par exemple:

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

Boîte de dialogue d'enregistrement de Smart Lock

Appelez ensuite CredentialsClient.save() pour enregistrer les identifiants des utilisateurs. Si l'appel de CredentialsClient.save() n'aboutit pas immédiatement, les identifiants peuvent être nouveaux. Dans ce cas, l'utilisateur doit confirmer la requête d'enregistrement. Résoudre ResolvableApiException avec startResolutionForResult() pour inviter l'utilisateur à confirmer l'opération.

Si l'utilisateur choisit de ne pas enregistrer d'identifiants, il ne sera plus invité à enregistrer les identifiants du compte pour l'application. Si vous appelez CredentialsClient.save() alors qu'un utilisateur a désactivé cette option, le résultat sera associé au code d'état CANCELED. L'utilisateur peut activer cette option ultérieurement dans l'application Paramètres Google, dans la section "Smart Lock pour les mots de passe". L'utilisateur doit activer l'enregistrement des identifiants pour tous les comptes afin d'être invité à les enregistrer la prochaine fois.

mCredentialsClient.save(credential).addOnCompleteListener(
        new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "SAVE: OK");
                    Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // Try to resolve the save request. This will prompt the user if
                    // the credential is new.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    try {
                        rae.startResolutionForResult(this, RC_SAVE);
                    } catch (IntentSender.SendIntentException exception) {
                        // Could not resolve the request
                        Log.e(TAG, "Failed to send resolution.", exception);
                        Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // Request has no resolution
                    Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                }
            }
        });</pre>

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // ...

        if (requestCode == RC_SAVE) {
            if (resultCode == RESULT_OK) {
                Log.d(TAG, "SAVE: OK");
                Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
            } else {
                Log.e(TAG, "SAVE: Canceled by user");
            }
        }

        // ...

    }

Après avoir stocké les identifiants, récupérez-les en appelant CredentialsClient.request().

Ciblage d'Android O ou version ultérieure

Lorsque vous enregistrez des identifiants de mot de passe à l'aide de Smart Lock sur des appareils équipés d'Android O ou d'une version ultérieure, Smart Lock utilise la boîte de dialogue de confirmation de saisie automatique native sur sa propre boîte de dialogue dans la mesure du possible. Notez que les identifiants enregistrés à l'aide de la saisie automatique avec Google sont partagés de manière bidirectionnelle avec Smart Lock pour les mots de passe.