Przechowywanie danych logowania użytkownika

Gdy użytkownicy zalogują się, utworzą konta lub zmienią hasło, zezwól im na przechowywanie swoich danych logowania, aby zautomatyzować przyszłe uwierzytelnianie w Twojej aplikacji.

Zanim zaczniesz

Skonfiguruj projekt Android Studio.

Zapisuj dane logowania

Utwórz obiekt Credential zawierający dane logowania użytkownika. Aby na przykład zezwolić użytkownikom na przechowywanie ich danych logowania po zalogowaniu się za pomocą haseł:

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

Albo na przykład gdy użytkownicy zalogują się na swoje konta Google:

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

Okno zapisywania funkcji Smart Lock

Następnie wywołaj CredentialsClient.save(), aby zapisać dane logowania użytkowników. Jeśli wywołanie CredentialsClient.save() nie powiedzie się od razu, dane logowania mogą być nowe. W takim przypadku użytkownik musi potwierdzić żądanie zapisu. Rozwiąż ResolvableApiException za pomocą startResolutionForResult(), aby poprosić użytkownika o potwierdzenie.

Jeśli użytkownik nie zdecyduje się na zapisywanie danych logowania, nie będzie musiał więcej prosić o zapisanie danych logowania do aplikacji. Jeśli wywołasz funkcję CredentialsClient.save() po tym, jak użytkownik zrezygnuje, wynik będzie miał kod stanu CANCELED. Użytkownik może włączyć tę funkcję później w aplikacji Ustawienia Google w sekcji Smart Lock na hasła. Jeśli użytkownik chce zapisać dane logowania następnym razem, musi włączyć zapisywanie danych logowania na wszystkich kontach.

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

        // ...

    }

Po zapisaniu danych logowania możesz je pobrać, wywołując metodę CredentialsClient.request().

Kierowanie na Androida O i nowszego

Gdy zapisujesz dane logowania przy użyciu Smart Lock na urządzeniach z Androidem O lub nowszym, w miarę możliwości używa ona natywnego okna potwierdzenia autouzupełniania w swoim własnym oknie. (Pamiętaj, że dane logowania zapisane przy użyciu autouzupełniania z Google są udostępniane dwukierunkowo w ramach funkcji Smart Lock na hasła).