Récupérer les identifiants enregistrés d'un utilisateur

<ph type="x-smartling-placeholder">

Connecter automatiquement les utilisateurs à votre application à l'aide de l'API Credentials pour demander et récupérer les identifiants stockés pour vos utilisateurs.

Avant de commencer

Configurez un projet Android Studio.

Créer un objet CredentialsClient

Pour demander des identifiants stockés, vous devez créer une instance de CredentialsClient pour accéder à l'API Credentials:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

Créer un objet CredentialRequest

Un objet CredentialRequest spécifie des systèmes de connexion auxquels vous souhaitez demander des identifiants. Créez un CredentialRequest à l'aide de la méthode setPasswordLoginSupported pour la connexion par mot de passe, et la méthode setAccountTypes() pour les connexions fédérées de services de connexion tels que Google Sign-In.

mCredentialRequest = new CredentialRequest.Builder()
    .setPasswordLoginSupported(true)
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
    .build();

Utiliser les constantes définies dans IdentityProviders pour spécifier les fournisseurs de connexion couramment utilisés. Pour les autres fournisseurs de connexion, utilisez qui identifie le fournisseur de manière unique. Vous devez utiliser le même identifiant de fournisseur pour stocker les identifiants lorsque vous les utilisez pour les récupérer.

Demander les identifiants stockés

Après avoir créé les objets CredentialsClient et CredentialRequest, transmettez l'objet de requête à la CredentialsClient.request() pour demander les identifiants stockés pour votre application.

  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
                  // See "Handle successful credential requests"
                  onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }

              // See "Handle unsuccessful and incomplete credential requests"
              // ...
          }
      });

Définissez un rappel pour gérer les requêtes ayant abouti et ayant échoué à l'aide de la méthode addOnCompleteListener().

Gérer les requêtes d'identifiants réussies

Toast indiquant une connexion réussie En cas de demande d'identifiants réussie, utilisez le résultat Credential pour finaliser la connexion de l'utilisateur à votre application. Utiliser la méthode getAccountType() pour déterminer le type d'identifiants récupérés, puis connectez-vous de manière appropriée processus. Par exemple, pour Google Sign-In, créez un objet GoogleSignInClient qui inclut l'ID de l'utilisateur, puis utilisez l'objet pour lancer le flux de connexion. Pour les mots de passe utilisez l'ID et le mot de passe de l'objet "Credential" pour effectuer l'opération processus de connexion.

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential.
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}

Gérer plusieurs identifiants enregistrés

Sélecteur de compte Smart Lock

Lorsqu'une entrée utilisateur est requise pour sélectionner un identifiant, la tâche request() échouent avec une ResolvableApiException. Vérifiez que getStatusCode() renvoie RESOLUTION_REQUIRED et appeler la méthode startResolutionForResult() de l'exception pour inviter l'utilisateur ; pour choisir un compte. Ensuite, récupérez les identifiants choisis par l'utilisateur à partir du la méthode onActivityResult() de l'activité en transmettant Credential.EXTRA_KEY à la getParcelableExtra() .

mCredentialsClient.request(request).addOnCompleteListener(
        new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    // ...
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // This is most likely the case where the user has multiple saved
                    // credentials and needs to pick one. This requires showing UI to
                    // resolve the read request.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    resolveResult(rae, RC_READ);
                } else if (e instanceof ApiException) {
                    // The user must create an account or sign in manually.
                    Log.e(TAG, "Unsuccessful credential request.", e);

                    ApiException ae = (ApiException) e;
                    int code = ae.getStatusCode();
                    // ...
                }
            }
        });
private void resolveResult(ResolvableApiException rae, int requestCode) {
    try {
        rae.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving = true;
    } catch (IntentSender.SendIntentException e) {
        Log.e(TAG, "Failed to send resolution.", e);
        hideProgress();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // ...

    if (requestCode == RC_READ) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved(credential);
        } else {
            Log.e(TAG, "Credential Read: NOT OK");
            Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    // ...

}

Lorsque les identifiants stockés sont introuvables, les utilisateurs doivent créer un compte ou connectez-vous. Si getStatusCode() renvoie SIGN_IN_REQUIRED, vous pouvez, si vous le souhaitez, accélérer les processus d'inscription et de connexion en affichant une invite à choisir les informations de connexion récemment utilisées, telles que l'adresse e-mail et et remplir automatiquement certains champs des formulaires avec cette information. Consultez Fournir des conseils de connexion à l'utilisateur. pour en savoir plus.

Une fois la connexion établie, autorisez les utilisateurs à enregistrer leurs identifiants. pour automatiser les futures authentifications sur tous leurs appareils.