После того как пользователи успешно войдут в систему, создадут учетные записи или изменят пароли, разрешите им сохранять свои учетные данные для автоматизации будущей аутентификации в вашем приложении.
Прежде чем начать
Настройте проект Android Studio .
Учетные данные магазина
Создайте объект Credential
, содержащий данные для входа пользователя. Например, чтобы позволить пользователям сохранять свои учетные данные после успешного входа в систему с использованием своих паролей:
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();
Или, например, после того, как пользователи успешно вошли в свою учетную запись Google :
GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
Затем вызовите CredentialsClient.save()
чтобы сохранить учетные данные пользователей. Если вызов CredentialsClient.save()
не завершается сразу успешно, учетные данные могут быть новыми, и в этом случае пользователь должен подтвердить запрос на сохранение. Устраните ResolvableApiException
с помощью startResolutionForResult()
чтобы запросить у пользователя подтверждение.
Если пользователь решит не сохранять учетные данные, ему больше не будет предложено сохранить учетные данные какой-либо учетной записи для приложения. Если вы вызываете CredentialsClient.save()
после того, как пользователь отказался от участия, его результат будет иметь код состояния CANCELED
. Пользователь может принять участие позже в приложении «Настройки Google» в разделе «Smart Lock для паролей». Пользователь должен включить сохранение учетных данных для всех учетных записей, чтобы в следующий раз ему было предложено сохранить учетные данные.
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");
}
}
// ...
}
После сохранения учетных данных получите их, вызвав CredentialsClient.request()
.
Таргетинг на Android O и более поздних версий
Когда вы сохраняете учетные данные пароля с помощью Smart Lock на устройствах под управлением Android O или новее, Smart Lock использует собственное диалоговое окно подтверждения автозаполнения вместо собственного диалогового окна, когда это возможно. (Обратите внимание, что учетные данные, сохраненные с помощью автозаполнения Google, передаются в двустороннем порядке с помощью Smart Lock для паролей.)