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