Przechowywanie danych logowania użytkownika

Gdy użytkownicy zalogują się, utworzą konta lub zmienią hasła, zezwól na przechowywania danych logowania w celu automatyzacji przyszłego uwierzytelniania w aplikacji.

Zanim zaczniesz

Skonfiguruj projekt Android Studio.

Zapisz dane logowania

Utwórz obiekt Credential zawierający dane logowania użytkownika. Dla: aby umożliwić użytkownikom przechowywanie danych logowania po zalogowaniu się jego hasła:

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

lub na przykład, gdy uda mu się zaloguje się na swoje konto 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ć użytkowników dane logowania. Jeśli połączenie z numerem CredentialsClient.save() nie jest wykonywane natychmiast dane logowania mogą być nowe. W takim przypadku użytkownik musi je potwierdzić. i zapiszę prośbę. Rozwiąż ResolvableApiException za pomocą startResolutionForResult(), aby poprosić użytkownika o potwierdzenie.

Jeśli użytkownik zdecyduje się nie zapisywać danych logowania, nie będzie proszony o to, aby to zrobić. zapisać dane logowania do konta tej aplikacji. Jeśli dzwonisz CredentialsClient.save(), jeśli użytkownik zrezygnuje z subskrypcji, w wynikach wyszukiwania będzie widoczny element kodu stanu CANCELED. Użytkownik może później zarejestrować się w Google Ustawienia w sekcji Smart Lock na hasła. Użytkownik musi włączyć do zapisywania danych logowania na wszystkich kontach, by następnym razem wyświetlić je z prośbą o zapisanie danych logowania.

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 CredentialsClient.request()

Kierowanie na Androida O i nowsze wersje

Gdy zapisujesz dane logowania przy użyciu Smart Lock na urządzeniach z Androidem O lub nowszej, Smart Lock używa natywnego okna potwierdzenia autouzupełniania zamiast własnego gdy tylko jest to możliwe. (Pamiętaj, że dane logowania zapisane przy użyciu autouzupełniania z Dane Google są dwukierunkowe udostępniane funkcji Smart Lock na hasła).