새로운 Google 로그인 API

Google ID 서비스 (GIS)는 개발자가 쉽게 구현할 수 있는 패키지로 사용자에게 쉽고 안전한 로그인 및 가입을 제공하는 새로운 API 집합입니다. 이 문서에서는 사용자가 'Google 계정으로 로그인' 버튼을 탭할 때 로그인 또는 가입 과정을 시작하는 데 사용할 수 있는 새 Google 로그인 API (GIS의 일부)에 관해 자세히 설명합니다. 로그인 흐름에 기존 Google 로그인 API 대신 이 API를 사용할 수 있습니다.

사용자가 Google 계정으로 로그인하려는 의도를 명시적으로 보여주는 경우에만 이 API를 사용해야 합니다. 예를 들어 앱에서 'Google 계정으로 로그인' 버튼을 클릭할 때 이 API를 사용합니다.

앱 실행 시 또는 장바구니에 상품 추가와 같은 다른 트리거에 대한 응답으로 사용자에게 로그인하라는 메시지를 표시하는 데 이 API를 사용해서는 안 됩니다. 이러한 사용 사례에서는 원탭 로그인 및 가입을 사용합니다.

새 API로 Google 로그인 과정을 시작하면 다음 UI가 표시됩니다.

Google 로그인

시작하기 전에

Google API 콘솔 프로젝트 구성 및 Android 스튜디오 프로젝트 설정

로그인 요청

Identity API를 사용하여 Google 로그인 과정을 시작하려면 GetSignInRequest 객체를 빌드합니다. 그런 다음 SignInClient 객체에서 getSignInIntent를 호출합니다. 이 호출은 비동기식이며 성공 시 대화상자를 실행하기 위한 PendingIntent를 제공합니다.

    private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */

    private void signIn() {
        GetSignInIntentRequest request =
            GetSignInIntentRequest.builder()
                .setServerClientId(getString(R.string.server_client_id))
                .build();

        Identity.getSignInClient(activity)
            .getSignInIntent(request)
            .addOnSuccessListener(
                    result -> {
                        try {
                            startIntentSenderForResult(
                                    result.getIntentSender(),
                                    REQUEST_CODE_GOOGLE_SIGN_IN,
                                    /* fillInIntent= */ null,
                                    /* flagsMask= */ 0,
                                    /* flagsValue= */ 0,
                                    /* extraFlags= */ 0,
                                    /* options= */ null);
                        } catch (IntentSender.SendIntentException e) {
                            Log.e(TAG, "Google Sign-in failed");
                        }
                    })
            .addOnFailureListener(
                    e -> {
                        Log.e(TAG, "Google Sign-in failed", e);
                    });
    }

로그인 결과 처리

onActivityResult에서 SignInCredential를 가져옵니다. getSignInCredentialFromIntent에서 반환된 SignInCredential 객체에는 유효한 로그인에 대한 정보가 포함됩니다. 사용자가 어떤 이유로든 로그인하지 않으면 ApiException이 발생합니다.

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
                try {
                    SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
                    // Signed in successfully - show authenticated UI
                    updateUI(credential);
                } catch (ApiException e) {
                    // The ApiException status code indicates the detailed failure reason.
                }
            }
        }
    }
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
    // handle intent result here
});

로그인에 성공하면 사용자의 전체 이름, 이메일, 프로필 사진 URL이 항상 반환됩니다. 추가 정보가 필요한 경우 사용자를 전체 프로필 정보 흐름으로 안내할 수 있습니다.