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

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