Google Sign-in API에서 인증 관리자로 이전 대응

Google Play Console의 메세지함에서 Google Sign-in API에서 인증관리자로 이전하라는 알림이 왔다. 앱이 Google 계정으로 로그인 기능을 사용하고 있었기에 이 코드를 인증 관리자로 대응이 필요하다. 앱에서 Google 계정으로 로그인 기능 사용할 때 java 코드로 되어있는 예제코드가 잘 없기에 여기 기록해 둔다.

관련 구글 문서

관련된 구글 문서는 다음과 같다.

종속 항목 선언

모듈 build.gradle 파일에서 인증관리자 최신 버전을 사용하여 종속 항목을 선언한다.

// 인증 관리자
implementation "androidx.credentials:credentials:1.5.0-alpha05"
implementation "androidx.credentials:credentials-play-services-auth:1.5.0-alpha05"
implementation "com.google.android.libraries.identity.googleid:googleid:1.0.0"

코드작성

인증관리자 구성 및 초기화한다. 로그인 흐름을 시작하고 로그인 성공 시 onResult에서 실패 시 onError에서 로그인 관련 처리를 수행하면 된다.
인증옵션 초기화에서는 GetGoogleOption으로 Google ID 토큰을 가져오게 된다. setAutoSelectEnable로 자동로그인을 활성화한다.

    // 인증 관리자 구성
    Context context = getApplicationContext();
    CredentialManager credentialManager = CredentialManager.create(context);

    // 인증옵션 초기화
    GetGoogleIdOption getGoogleIdOption = new GetGoogleIdOption.Builder()
            .setFilterByAuthorizedAccounts(false)   //구글계정 유무체크
            .setServerClientId(getString(R.string.default_web_client_id))  //웹클라이언트 키값
            .setAutoSelectEnabled(true) //자동 로그인 활성화
            .build();

    // 요청 생성
    GetCredentialRequest getCredRequest = new GetCredentialRequest.Builder()
            .addCredentialOption(getGoogleIdOption)
            .build();

    // 로그인 흐름 시작
    CredentialManagerCallback<GetCredentialResponse, GetCredentialException> credentialManagerCallback = new CredentialManagerCallback<GetCredentialResponse, GetCredentialException>() {
        @Override
        public void onResult(GetCredentialResponse getCredentialResponse) {
            // Handle success
            handleSignIn(getCredentialResponse);
        }

        @Override
        public void onError(@NonNull GetCredentialException e) {
            // Handle errors
            handleFailure(e);
        }
    };
    credentialManager.getCredentialAsync(
            context,
            getCredRequest,
            new CancellationSignal(),
            Executors.newSingleThreadExecutor(),
            credentialManagerCallback
    );

Leave a Comment