Gespeicherte Anmeldedaten eines Nutzers abrufen

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

Nutzer mithilfe der Credentials API automatisch bei Ihrer App anmelden und gespeicherte Anmeldedaten für Ihre Nutzer abrufen.

Hinweis

Konfigurieren Sie ein Android Studio-Projekt.

CredentialsClient-Objekt erstellen

Um gespeicherte Anmeldedaten anzufordern, müssen Sie eine Instanz von CredentialsClient, um auf die Credentials API zuzugreifen:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

CredentialRequest-Objekt erstellen

Ein CredentialRequest-Objekt gibt die Anmeldesystemen, von denen Sie Anmeldedaten anfordern möchten. Erstelle CredentialRequest mit der Methode setPasswordLoginSupported für passwortbasierte Anmeldung und die Methode setAccountTypes() für föderierte Anmeldedienste wie Google Log-in.

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

Die in IdentityProviders definierten Konstanten verwenden , um gängige Anmeldeanbieter anzugeben. Verwenden Sie für andere Anbieter für Anmeldungen eine beliebige String, der den Anbieter eindeutig identifiziert. Sie müssen dieselbe Anbieter-ID verwenden zum Speichern der Anmeldedaten, während Sie sie zum Abrufen der Anmeldedaten verwenden.

Gespeicherte Anmeldedaten anfordern

Nachdem Sie die Objekte CredentialsClient und CredentialRequest erstellt haben, übergeben Sie das Anfrageobjekt. für CredentialsClient.request() , um für Ihre Anwendung gespeicherte Anmeldedaten anzufordern.

  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"
              // ...
          }
      });

Definieren Sie einen Callback zur Verarbeitung erfolgreicher und fehlgeschlagener Anfragen mithilfe der addOnCompleteListener()-Methode.

Erfolgreiche Anmeldedatenanfragen verarbeiten

Pop-up, das auf eine erfolgreiche Anmeldung hinweist Bei einer erfolgreichen Anforderung von Anmeldedaten verwenden Sie das Credential um die Anmeldung des Nutzers in Ihrer App abzuschließen. Methode getAccountType() verwenden um den Typ der abgerufenen Anmeldedaten zu ermitteln, und führen Sie dann die entsprechenden Anmeldeinformationen aus. . Erstellen Sie beispielsweise für Google Log-in ein GoogleSignInClient-Objekt, das die ID des Nutzers enthält, dann verwenden Sie das Objekt, um den Anmeldevorgang zu starten. Passwortbasiert melden Sie sich an und verwenden Sie die ID und das Passwort des Nutzers aus dem Objekt „Anmeldedaten“, um den Vorgang abzuschließen. zur Anmeldung.

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();
        // ...
    }
}

Mehrere gespeicherte Anmeldedaten verarbeiten

Smart Lock-Kontoauswahl

Wenn Nutzereingaben zur Auswahl von Anmeldedaten erforderlich sind, wird mit der Aufgabe request() Folgendes ausgeführt: mit einem ResolvableApiException fehl. Prüfen Sie, ob getStatusCode() gibt RESOLUTION_REQUIRED und die startResolutionForResult()-Methode der Ausnahme aufrufen, um den Nutzer aufzufordern um ein Konto auszuwählen. Rufen Sie dann die vom Nutzer ausgewählten Anmeldedaten onActivityResult()-Methode der Aktivität durch Übergeben von Credential.EXTRA_KEY an den 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();
        }
    }

    // ...

}

Wenn gespeicherte Anmeldedaten nicht gefunden werden, müssen Nutzer ein Konto erstellen oder manuell melden Sie sich an. Wenn getStatusCode() gibt SIGN_IN_REQUIRED zurück, können Sie optional die Anmelde- und Anmeldeprozesse beschleunigen, indem Sie Nutzer kürzlich verwendete Anmeldeinformationen wie E-Mail-Adresse und Namen hinzugefügt und einige Formularfelder automatisch mit diesen Informationen ausgefüllt. Weitere Informationen finden Sie unter Nutzern Anmeldehinweise bereitstellen. .

Nutzern nach erfolgreicher Anmeldung erlauben, ihre Anmeldedaten zu speichern um die zukünftige Authentifizierung auf allen ihren Geräten zu automatisieren.