使用凭据保存功能保存密码

如需为回访用户启用一键登录功能,您可以提示用户通过 Google 保存密码。用户将能够在您的应用和网站上使用其保存的密码登录。

启动保存密码流程时,系统会向用户显示一个底部动作条对话框,让用户选择是否想要保存密码以及要将密码保存到哪个 Google 帐号。

保存密码的屏幕截图

启动密码保存底部动作条对话框

在通过后端对用户名和密码进行身份验证后,您应该启动密码保存对话框。验证身份时将凭据保留在内存中。确认凭据有效后,请执行以下操作以启动保存对话框:

  1. 创建一个新的 SignInPassword 对象。它应使用用户用于您的服务的用户 ID(例如,其用户名或电子邮件地址)和密码进行初始化,

    private static final int REQUEST_CODE_GIS_SAVE_PASSWORD = 2; /* unique request id */
    private void savePassword() {
        SignInPassword signInPassword = new SignInPassword(userId, password);
        ...
    
  2. 创建一个 SavePasswordRequest 对象

    SavePasswordRequest savePasswordRequest =
        SavePasswordRequest.builder().setSignInPassword(signInPassword).build();
    
  3. 获取 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
    });