Невозможно хранить токены с текущим API Smart Lock, но вы можете сохранить тип учетной записи, выбранный пользователем.Например, чтобы помнить, что пользователь использовал OAuth с Google, создайте учетные данные, подобные этим:
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
Вы можете определить свои собственные типы учетных записей.Если указанные адреса электронной почты соответствуют учетной записи Google на устройстве, эта запись может быть сохранена автоматически;в противном случае пользователю нужно будет подтвердить, с какой учетной записью Google сохранить данные.
Затем вы можете получить эту информацию позже на другом устройстве или после окончания сеанса пользователя и автоматически запустить поток входа дляэтот OAuth предоставляют.Например, с Google:
mCredentialRequest = new CredentialRequest.Builder()
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
new OnCompleteListener<CredentialRequestResponse>() {
@Override
public void onComplete(@NonNull Task<CredentialRequestResponse> task) {
if (task.isSuccessful()) {
onCredentialRetrieved(task.getResult().getCredential());
return;
}
}
});
private void onCredentialRetrieved(Credential credential) {
String accountType = credential.getAccountType();
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();
// ...
}
}
Как описано в документации: https://developers.google.com/identity/smartlock-passwords/android/retrieve-credentials