Google 로그인을 Android 앱에 통합하려면 Google 로그인 및 로그인 흐름을 시작하는 버튼을 앱 레이아웃에 추가합니다.
시작하기 전에
Google API 콘솔 프로젝트 구성 및 Android 스튜디오 프로젝트 설정
Google 로그인 및 GoogleSignInClient 객체 구성
로그인 활동의
onCreate
메서드에서 다음과 같이 Google 로그인을 구성합니다. 사용자 데이터를 요청할 수 있어야 합니다. 예를 들어 사용자 요청을 위한 Google 로그인 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();
Google API에 액세스하기 위해 추가 범위를 요청해야 하는 경우 해당 범위를 지정합니다.
requestScopes
와 함께 사용할 수 있습니다. 최상의 사용자 환경을 위해 로그인 시 최소 요구 사항을 충족해야 합니다 추가 범위 요청 필요한 경우에만 맥락에 맞게 수집됩니다 추가 범위 요청을 참고하세요.그런 다음 로그인 활동의
onCreate
메서드에서도 다음을 만듭니다.GoogleSignInClient
객체를 반환합니다.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
기존에 로그인한 사용자 확인
활동의 onStart
메서드에서 사용자가 이미 Google 계정으로 앱에 로그인했는지 확인합니다.
// 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
객체를 반환하는 경우
사용자가 이미 Google로 앱에 로그인했습니다(null
이 아님).
이에 따라 UI를 업데이트합니다. 즉, 로그인 버튼을 숨기고
기본 활동 또는 앱에 적합한 모든 활동을 포함할 수 있습니다.
GoogleSignIn.getLastSignedInAccount
가 null
를 반환하면 사용자가 아직
Google 계정으로 앱에 로그인했습니다. Google 로그인을 표시하도록 UI 업데이트
버튼을 클릭합니다.
앱에 Google 로그인 버튼 추가
SignInButton
추가 합니다.<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
선택사항: 기본 로그인 버튼 그래픽을 사용하는 경우 자체 로그인 버튼 애셋을 제공하면 버튼에 대한
setSize
로 크기 조절 메서드를 사용하여 축소하도록 요청합니다.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Android 활동 (예:
onCreate
메서드)에서 클릭 시 사용자를 로그인 처리하기 위해 버튼의OnClickListener
를 설정합니다.findViewById(R.id.sign_in_button).setOnClickListener(this);
로그인 과정 시작
활동의
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
이외의 범위를 요청한 경우 요청된 리소스에 대한 액세스 권한을 부여하라는 메시지도 표시됩니다.사용자가 로그인하면
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
를 사용하여 사용자의 이메일 주소를 가져올 수도 있습니다.getId
를 포함하는 사용자의 Google ID (클라이언트 측용)getIdToken
로 사용자의 ID 토큰을 반환합니다. 현재 로그인한 사용자를 백엔드 서버에 전달해야 하는 경우 백엔드 서버로 ID 토큰을 전송 서버에서 토큰의 유효성을 검사합니다