Чтобы включить вход в систему одним касанием для вернувшихся пользователей, вы можете предложить им сохранить свой пароль в Google. Пользователь сможет войти в систему, используя сохраненные пароли, в вашем приложении и в Интернете.
Когда вы запускаете процесс сохранения пароля, пользователю будет представлено диалоговое окно нижнего листа, позволяющее ему выбрать, хотят ли они сохранить свой пароль и в какой учетной записи Google они хотят его сохранить.
Запустить диалоговое окно сохранения пароля на нижнем листе
Вам следует запустить диалоговое окно сохранения пароля после того, как вы аутентифицируете имя пользователя и пароль на своем сервере. Сохраняйте учетные данные в памяти во время аутентификации. Убедившись, что учетные данные действительны, запустите диалоговое окно сохранения, выполнив следующие действия:
Создайте новый объект
SignInPassword
. Его следует инициализировать с помощью идентификатора пользователя, который они используют в вашей службе (например, имя пользователя или адрес электронной почты), и пароля, который вы хотите сохранить.private static final int REQUEST_CODE_GIS_SAVE_PASSWORD = 2; /* unique request id */ private void savePassword() { SignInPassword signInPassword = new SignInPassword(userId, password); ...
Создайте объект
SavePasswordRequest
SavePasswordRequest savePasswordRequest = SavePasswordRequest.builder().setSignInPassword(signInPassword).build();
Получите
PendingIntent
для отображения диалогового окна сохранения пароля изIdentity.getCredentialSavingClient
и запустите поток:Identity.getCredentialSavingClient(activity) .savePassword(savePasswordRequest) .addOnSuccessListener( result -> { startIntentSenderForResult( result.getPendingIntent().getIntentSender(), REQUEST_CODE_GIS_SAVE_PASSWORD, /* fillInIntent= */ null, /* flagsMask= */ 0, /* flagsValue= */ 0, /* extraFlags= */ 0, /* options= */ null); })
Обработка результатов сохранения пароля
Обработайте результат потока сохранения пароля в onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_GIS_SAVE_PASSWORD) {
if (resultCode == Activity.RESULT_OK) {
/* password was saved */
} else if (resultCode == Activity.RESULT_CANCELED) {
/* password saving was cancelled */
}
}
}
private ActivityResultLauncher<IntentSenderRequest> savePasswordHandler =
registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
// handle intent result here
});