如需为回访用户启用一键式登录,您可以提示用户将其密码保存到 Google 账号中。用户将能够在您的应用和网站上使用其已保存的密码登录。
当您启动保存密码流程时,系统会向用户显示一个底部动作条对话框,让用户选择是否要保存密码以及要将密码保存到哪个 Google 账号。
启动密码保存底部动作条对话框
您应在使用后端对用户名和密码进行身份验证后启动密码保存对话框。在进行身份验证时,将凭据保留在内存中。确认凭据有效后,请执行以下操作以启动保存对话框:
创建一个新的
SignInPassword
对象。它应使用用户在您的服务中使用的用户 ID(例如用户名或电子邮件地址)和您要保存的密码进行初始化。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
});