2016년 5월 19일자 구글 로그인 구현(Google Login)

MFam, 2016-05-19 14:07:09

조회 수
127

잊기전에 메뉴얼화 해놔야지.



내 앱 -> 구글 로그인 버튼 누름 -> 구글 로그인 -> 내 앱으로 프로필 정보 전달 (E-mail, name, IdToken, photoURL 등...) 까지 구현하고자 함


1. 모르면 구글링

검색어 : android google login get profile 


구글링 하니 이렇게 하면 된다는게 나왔음.

https://developers.google.com/identity/sign-in/android/people


왼쪽 메뉴에 보니 튜토리얼이 있네. Start Integrating 부터 차근차근 따라해보자.



2. Android Studio 설치, SDK Manager 실행해서 Google Play Service를 꼭 인스톨 해야 함.


3. Get a configuration file

1.JPG

설정 파일을 받으라 함..  하단 버튼을 누르라 함.. Google API 관리 페이지로 이동됨..


4. 이동해서 내 앱에 대한 정보 입력하고.. 어떤 서비스 이용할지 선택.2.JPG



5. SHA-1 키를 얻어내야 함. 하단에 How do I find my SHA-1? 을 눌러보면 설명이 나옴.

https://developers.google.com/android/guides/client-auth 참조


그래도 혹시 설명해두자면

keytool <-- 이건 java가 설치되어 있는 폴더에 들어있음

내 컴을 기준으로 C:\Program Files\Java\jdk1.8.0_91\bin 여기

이 경로에서 cmd 창을 띄우고


keytool -exportcert -alias androiddebugkey -keystore C:\디버그키경로\debug.keystore -list -v


이렇게 입력하면 


3.JPG


이런것들이 나오는데 SHA1 이라고 되어 있는곳에 키가 그 키임.

이건 테스트용이니까 디버그키로 작성했는데, 실제 앱을 배포할땐 실제 사용하는 keystore를 사용해야 함.

디버그 키 비밀번호는 android 임.



6. 이게 완료되면 google-services.json 파일을 다운받을 수 있음.

이 걸 너의 안드로이드 스튜디오 프로젝트 app/ or mobile/   디렉토리에 다운받으라 함.

$ move path-to-download/google-services.json app/

뭐 이렇게 되어있지만.. 그냥 윈도우 탐색기로 옮기면 됨.


7. 다음 안드로이드 스튜디오에서 Gradle 파일을 수정해야 함.

Project-level 의 build.gradle 파일을 오픈해서 dependencies 에 classpath 'com.android.tools.build:gradle:2.1.0' 를 추가함

4.JPG




다음 App-Level 의 build.gradle 파일을 열어서 apply plugin: 'com.google.gms.google-services' 내용을 추가하고

dependencies {

        compile 'com.google.android.gms:play-services-auth:8.4.0'

    }


이것도 추가함.

5.JPG


뭐 이렇게..  다 추가하고 난 다음에 gradle 를 sync 함.

그럼 이제 google play service 관련 class 들을 사용할 수 있음.


이제 셋팅이 끝났음. 아휴... 진짜...



8. 이제부터 코딩 시작. (간단함, 쉬움)

https://developers.google.com/identity/sign-in/android/sign-in

여기 페이지를 참조하면 아주 쉽게 만들 수 있으며, 고맙게도 SignInActivity.java 라는 샘플코드도 만들어놨음.


Integrating Google Sign-In into Your Android App

To integrate Google Sign-In into your Android app, configure Google Sign-In and add a button to your app's layout that starts the sign-in flow.

Before you begin

Configure a Google Developers Console project and set up your Android Studio project.

Configure Google Sign-In and the GoogleApiClient object

  1. In your sign-in activity's onCreate method, configure Google Sign-In to request the user data required by your app. For example, to configure Google Sign-In to request users' ID and basic profile information, create a GoogleSignInOptions object with the DEFAULT_SIGN_IN parameter. To request users' email addresses as well, create the GoogleSignInOptions object with therequestEmail option.

    If you need to request additional scopes to access Google APIs, specify them with requestScopes.

  2. Then, also in your sign-in activity's onCreate method, create a GoogleApiClient object with access to the Google Sign-In API and the options you specified.

Add the Google Sign-In button to your app

  1. The standard Google sign-in buttonAdd the SignInButton in your application's layout:

    <com.google.android.gms.common.SignInButton
     
    android:id="@+id/sign_in_button"
     
    android:layout_width="wrap_content"
     
    android:layout_height="wrap_content" />
  2. Optional: If you are using the default sign-in button graphic instead of providing your own sign-in button assets, you can customize the button's size and color scheme with the setSize andsetScopes methods. Also, if you specify a Google+ social scope to setScopes, the sign-in button will be rendered with the red Google+ branding.

  3. In the Android activity (for example, in the onCreate method), register your button'sOnClickListener to sign in the user when clicked:

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

Start the sign-in flow

  1. Image of the Sign-In account chooserIn the activity's onClick method, handle sign-in button taps by creating a sign-in intent with thegetSignInIntent method, and starting the intent with startActivityForResult.

    @Override
    public void onClick(View v) {
       
    switch (v.getId()) {
           
    case R.id.sign_in_button:
                signIn
    ();
               
    break;
           
    // ...
       
    }
    }

    Starting the intent prompts the user to select a Google account to sign in with. If you requested scopes beyond profileemail, and openid, the user is also prompted to grant access to the requested resources.

  2. In the activity's onActivityResult method, retrieve the sign-in result withgetSignInResultFromIntent.

    After you retrieve the sign-in result, you can check if sign-in succeeded with the isSuccess method. If sign-in succeeded, you can call the getSignInAccount method to get a GoogleSignInAccountobject that contains information about the signed-in user, such as the user's name.

    You can also get the user's email address with getEmail, the user's Google ID (for client-side use) with getId, and an ID token for the user with with getIdToken. If you need to pass the currently signed-in user to a backend server, send the ID token to your backend server and validate the token on the server.

Cross-platform single sign on

You can use silentSignIn to automatically sign the user in if the user previously granted authorization to your app on another platform. This allows the user to be signed in to your app immediately, if your project clients are configured to meet the following requirements:

  • The OAuth 2.0 client IDs must be in the same Google Developers Console project.
  • The OAuth scopes must be the same in both clients.

If the user signed in to your web app previously, silent sign-in succeeds. You can proceed to access Google APIs to retrieve the user's info and bypass the need for the user to sign in to your app again.


위 1~7까지 셋팅만 잘 해놨다면 위 코드 그대로 갔다 붙여넣기만해도...

잘 동작함... 


셋팅까지가 힘들었지.. 코드 해석과 설명은 쉬우니까.. 그냥 한번만 봐도 쉽게 알 수 있습니다..

결론적으로 startActivityForResult 를 통해서 구글쪽 로그인 화면을 띄우고... 거기서 로그인이 완료되면 onActivityResult 에서 관련 데이터를 받는다는 내용입니다.


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}

private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
Log.d(TAG, "acct id : " + acct.getId());
Log.d(TAG, "acct getDisplayName : " + acct.getDisplayName());
Log.d(TAG, "acct getIdToken : " + acct.getIdToken());
Log.d(TAG, "acct getServerAuthCode : " + acct.getServerAuthCode());
Log.d(TAG, "acct getEmail : " + acct.getEmail());
Log.d(TAG, "acct getPhotoUrl : " + acct.getPhotoUrl());
}
}

이런식으로 잘 되는지 로그 한번 찍어보세요.




끝!


퍼갈땐 출처 : http://www.mfamstory.com 꼭 밝히기!


0 댓글

댓글 쓰기

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)

목록

Page 1 / 24
번호 제목 글쓴이 날짜 조회 수
공지

http://www.MFamStory.com 입니다.

| ETC 6
MFam 2010-11-03 47513
257

Android Studio로 작업하면서 새로이 사용했던 Lib들 간략 소개

| Android 1
MFam 2016-07-05 166
256

Android Media Database에서 image 조회할 때 gif 제외...

| Android
MFam 2016-07-05 137
255

openGL 2.0 Bitmap Load 실패하는 경우, 하드웨어 가속 끄기

| Android
MFam 2016-05-26 118
254

Volley, Retrofit 비교. 어떤거 사용할까 고민중

| Android
MFam 2016-05-23 104
253

2016년 5월 19일자 구글 로그인 구현(Google Login)

| Android
  • file
MFam 2016-05-19 127
252

Proguard 설정하기

| ETC
MFam 2014-12-29 180
251

안드로이드/Android 루팅 여부 확인 하기

| Android
MFam 2014-10-23 305
250

윈도우 Eclipse에서 MS949로 작업하다 mac 으로 프로젝트를 넘겼을 경우 한글 인코딩 해결 방안

| ETC
MFam 2013-12-03 394
249

Libgdx 와 Robovm 을 이용한 iOS 포팅

| ETC
MFam 2013-10-24 377
248

JAVA InputStream , OutputStream 종류와 각각의 특징

| JAVA
MFam 2013-07-03 653
247

HTTP Status Code(HTTP 1.1 : RFC 2616)

| ETC
MFam 2013-07-02 398