사용자 인증 정보 저장으로 비밀번호 저장하기

재사용자에게 원탭 로그인을 사용 설정하려면 사용자에게 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
    });