Anmeldedaten eines Nutzers speichern

Nachdem sich Nutzer erfolgreich angemeldet, Konten erstellt oder Passwörter geändert haben, erlauben Sie ihnen, ihre Anmeldedaten zu speichern, um die zukünftige Authentifizierung in Ihrer Anwendung zu automatisieren.

Hinweis

Android Studio-Projekt konfigurieren

Anmeldedaten speichern

Erstellen Sie ein Credential-Objekt, das die Anmeldedaten eines Nutzers enthält. So können Nutzer beispielsweise ihre Anmeldedaten speichern, nachdem sie sich mit ihrem Passwort angemeldet haben:

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

Zum Beispiel, nachdem sich Nutzer erfolgreich mit ihrem Google-Konto angemeldet haben:

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

Smart Lock-Dialogfeld "Speichern"

Rufen Sie dann CredentialsClient.save() auf, um die Anmeldedaten der Nutzer zu speichern. Wenn der Aufruf von CredentialsClient.save() nicht sofort erfolgreich ist, sind die Anmeldedaten möglicherweise neu. In diesem Fall muss der Nutzer die Speicheranfrage bestätigen. Lösen Sie ResolvableApiException mit startResolutionForResult() auf, um den Nutzer zur Bestätigung aufzufordern.

Wenn der Nutzer sich entscheidet, keine Anmeldedaten zu speichern, wird er nicht noch einmal aufgefordert, Kontoanmeldedaten für die Anwendung zu speichern. Wenn Sie CredentialsClient.save() aufrufen, nachdem ein Nutzer die Deaktivierung durchgeführt hat, hat das Ergebnis den Statuscode CANCELED. Der Nutzer kann die Funktion später in der App „Google Einstellungen“ im Bereich „Smart Lock für Passwörter“ aktivieren. Der Nutzer muss das Speichern von Anmeldedaten für alle Konten aktivieren, damit er beim nächsten Mal zum Speichern der Anmeldedaten aufgefordert wird.

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

        // ...

    }

Nach dem Speichern der Anmeldedaten rufen Sie sie durch Aufrufen von CredentialsClient.request() ab.

Auf Android O und höher ausgerichtet

Wenn Sie Passwortanmeldedaten mit Smart Lock auf Geräten mit Android O oder höher speichern, verwendet Smart Lock nach Möglichkeit das native Autofill-Bestätigungsdialogfeld anstelle des eigenen Dialogfelds. (Beachten Sie, dass mit Autofill mit Google gespeicherte Anmeldedaten bidirektional mit Smart Lock für Passwörter geteilt werden.)