透過憑證儲存功能儲存密碼

如要為回訪使用者啟用「一鍵登入」功能,可以提示使用者透過 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
    });