인증 전용 사용자 로그인 시나리오의 경우 Android 기본 앱에 대해 최신 Google로 로그인 및 원탭 버튼을 사용하는 것이 좋습니다.

Android 앱에 Google 로그인 통합

Google 로그인을 Android 앱에 통합하려면 Google 로그인을 구성하고 로그인 흐름을 시작하는 버튼을 앱 레이아웃에 추가하세요.

시작하기 전에

구글 API 콘솔 프로젝트를 구성하고 안드로이드 스튜디오 프로젝트를 설정 .

Google 로그인 및 GoogleSignInClient 개체 구성

  1. 당신의 로그인 활동 년대 onCreate 방법, 구성 구글 로그인 앱에서 필요로하는 사용자 데이터를 요청합니다. 예를 들어, 생성, 요청 사용자 ID 및 기본 프로필 정보에 구글 로그인을 구성 GoogleSignInOptions 객체를 DEFAULT_SIGN_IN 매개 변수입니다. 요청 사용자의 이메일 주소뿐만 아니라, 만들기 GoogleSignInOptions 객체를 requestEmail 옵션을 선택합니다.

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    액세스 구글 API에 추가 범위를 요청해야하는 경우, 그들을 지정 requestScopes . 최상의 사용자 경험을 위해 로그인 시 앱이 최소한으로 작동하는 데 필요한 범위만 요청하세요. 필요한 경우에만 추가 범위를 요청하여 사용자가 수행한 작업의 컨텍스트에서 동의 화면을 볼 수 있도록 합니다. 참조 추가 범위를 요청 .

  2. 그런 다음, 또한 활동의 로그인 onCreate 방법, 생성 GoogleSignInClient 사용자가 지정한 옵션을 사용하여 객체를.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

기존 로그인한 사용자 확인

활동의에서 onStart 사용자가 이미 구글과 앱에 로그인 한 경우 방법 확인합니다.

// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);

경우 GoogleSignIn.getLastSignedInAccount 반환 GoogleSignInAccount 객체를 (보다는 null ), 사용자는 이미 구글과 앱에 로그인 한. 그에 따라 UI를 업데이트하십시오. 즉, 로그인 버튼을 숨기거나, 기본 활동을 시작하거나, 앱에 적합한 모든 것을 실행하십시오.

경우 GoogleSignIn.getLastSignedInAccount 반환 null 사용자가 아직 구글과 앱에 로그인하지 않았습니다. Google 로그인 버튼을 표시하도록 UI를 업데이트하세요.

앱에 Google 로그인 버튼 추가

  1. 표준 Google 로그인 버튼 추가 SignInButton 응용 프로그램의 레이아웃 :

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. 옵션 : 버튼을 그래픽에 로그인 기본 사용하는 대신에 자신의 로그인 버튼 자산을 제공하는 경우, 당신은 함께 버튼의 크기를 사용자 정의 할 수 있습니다 setSize 방법.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. 안드로이드 활동에서 (예를 들어,에 onCreate 방법), 사용자 버튼의 등록 OnClickListener 클릭하면 사용자 로그인하기 :

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

로그인 흐름 시작

  1. 로그인 계정 선택기 이미지 활동의에서 onClick 방법, 핸들 로그인 버튼을 탭으로 로그인 의도를 생성하여 getSignInIntent 방법과 함께 의도 시작 startActivityForResult .

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            // ...
        }
    }
    
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    인텐트를 시작하면 로그인할 Google 계정을 선택하라는 메시지가 사용자에게 표시됩니다. 당신이 이상으로 범위를 요청하면 profile , email , 및 openid , 사용자는 요청 된 리소스에 대한 액세스 권한을 부여하라는 메시지가 표시됩니다.

  2. 에서 사용자가 로그인 한 후, 당신은 얻을 수 GoogleSignInAccount 활동의의 사용자에 대한 오브젝트 onActivityResult 방법.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    GoogleSignInAccount 객체에 대한 정보를 포함하는 로그인 한 사용자와 같은 사용자의 이름으로.

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
    
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    당신은 또한에 사용자의 이메일 주소를 얻을 수 getEmail 와 (클라이언트 측 사용) 사용자의 Google ID getId 과 함께 사용자 토큰 ID getIdToken . 당신이 백엔드 서버에 로그인 한 사용자 - 현재를 통과해야하는 경우, 백엔드 서버에 토큰 ID를 전송 하고 해당 서버에있는 토큰을 확인합니다.