안드로이드

안드로이드 카카오계정 로그인 구현하기 android kakao login

알통몬_ 2017. 10. 18. 14:29
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드 카카오 계정 로그인 기능을 구현하는 방법에 대해 알아봅니다.

1. 안드로이드 프로젝트를 만듭니다.

저는 kLogin 이라는 프로젝트로 만들었어요.


2. https://developers.kakao.com/

위 카카오 개발자 센터에 들어가서 노란▼ 화살표 -> 내 애플리케이션 -> 앱 만들기를 선택하주세요.

3. 설정하기

이름 부분에는 보여질 이름을 설정해주시면 돼요.

아이콘이 따로 준비되어 있다면 아이콘을 업로드해주시면 되고 아니라면

이름만 입력하고 앱 만들기 버튼을 누르시면

아래처럼 확인 창이 뜨는데요. 가볍게 계속 진행 버튼을 눌러주시면 됩니다.(테스트니까요)

계속 진행을 누르면 아래 처럼 나오는데요.

개발 가이드 버튼 아래에 '설정' 링크를 클릭해줍니다.

들어가셔서 ClientSecret 코드를 생성해주시고,

상태를 On으로 바꾸고 적용해주세요.


그리고 플랫폼추가 버튼을 눌러서 안드로이드 플랫폼을 추가해주면 됩니다.

market url이 따로 없을 때는 입력을 하지 않으시면 자동으로 만들어 줍니다.

그리고 해시키를 추가하시면 되는데요.

윈도우는 cmd 창에서, 맥은 터미널에서

윈도우 기준으로 cmd 창을 여시고

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

아래 명령어 입력하시면 해시키가 뜹니다.

맥은

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64



출처: http://altongmon.tistory.com/432 [IOS를 Java]

하시면 됩니다.



그럼 이제 개발자센터에서 할 일은 끝났습니다.


이제 프로젝트로 가볼까요.

1. gradle.properties 에 KAKAO_SDK_VERSION 을 넣어주고요.

 가장 아래에 넣어주시면 됩니다.

KAKAO_SDK_VERSION=1.4.1

2. build.gradle(Project: kLogin)

jcenter() 아래 두 줄의 코드를 넣어주시면 됩니다.

allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
}
}

3. build.gradle(Module: app)

// 카카오 로그인 sdk를 사용하기 위해 필요.
compile group: 'com.kakao.sdk', name: 'usermgmt', version: project.KAKAO_SDK_VERSION

4. GlobalApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class GlobalApplication extends Application {
    private class KakaoSDKAdapter extends KakaoAdapter {
        /**
         * Session Config에 대해서는 default값들이 존재한다.
         * 필요한 상황에서만 override해서 사용하면 됨.
         * @return Session의 설정값.
         */
        @Override
        public ISessionConfig getSessionConfig() {
            return new ISessionConfig() {
                @Override
                public AuthType[] getAuthTypes() {
                    return new AuthType[] {AuthType.KAKAO_LOGIN_ALL};
                }
 
                @Override
                public boolean isUsingWebviewTimer() {
                    return false;
                }
 
                @Override
                public boolean isSecureMode() {
                    return false;
                }
 
                @Override
                public ApprovalType getApprovalType() {
                    return ApprovalType.INDIVIDUAL;
                }
 
                @Override
                public boolean isSaveFormData() {
                    return true;
                }
            };
        }
 
        @Override
        public IApplicationConfig getApplicationConfig() {
            return new IApplicationConfig() {
                @Override
                public Context getApplicationContext() {
                    return GlobalApplication.this.getApplicationContext();
                }
            };
        }
    }
 
    @Override
    public void onCreate() {
        super.onCreate();
        KakaoSDK.init(new KakaoSDKAdapter());
    }
}
cs


5. manifest.xml 아래 세 개를 추가해줍니다.


<application
android:name=".GlobalApplication"
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="@string/kakao_app_key" />
<activity
android:name="com.kakao.auth.authorization.authcode.KakaoWebViewActivity"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize">

<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>


strings.xml에도 한가지를 추가해주시면 되는데요.

<string name="kakao_app_key">699a10b11b9161088aec3e3f7990cce0</string>

6. activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">
    <com.kakao.usermgmt.LoginButton
        android:id="@+id/com_kakao_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"/>
</LinearLayout>
 
cs


7. MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class MainActivity extends AppCompatActivity {
    private SessionCallback callback;
 
    /**
     * 로그인 버튼을 클릭 했을시 access token을 요청하도록 설정한다.
     *
     * @param savedInstanceState 기존 session 정보가 저장된 객체
     */
    LoginButton loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loginButton = (LoginButton) findViewById(R.id.com_kakao_login);
        callback = new SessionCallback();
        getCurrentSession().addCallback(callback);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
            return;
        }
 
        super.onActivityResult(requestCode, resultCode, data);
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        getCurrentSession().removeCallback(callback);
    }
 
    private class SessionCallback implements ISessionCallback {
 
        @Override
        public void onSessionOpened() {
            redirectSignupActivity();
        }
 
        @Override
        public void onSessionOpenFailed(KakaoException exception) {
            if(exception != null) {
                Logger.e(exception);
            }
        }
    }
 
    protected void redirectSignupActivity() {
        final Intent intent = new Intent(this, SampleSignupActivity.class);
        startActivity(intent);
        finish();
    }
}
cs


마지막으로 SampleSignupActivity.java 와 그에 대응하는 activity_sample_signup.xml 은

자유롭게 만들어 주시면 됩니다.


그리고 로그아웃을 하고 싶을 때는 원하는 시점에서 아래 함수를 호출하시면 됩니다.

1
2
3
4
5
6
7
8
private void onClickLogout() {
        UserManagement.requestLogout(new LogoutResponseCallback() {
            @Override
            public void onCompleteLogout() {
                // 원하는 코드 ( 예를 들면 액티비티 이동)
            }
        });
    }
cs


이상입니다.

궁금하신 점은 댓글을 달아주시면 아는 지식 선에서 답변드리겠습니다.

* 참고로 테스트 상태이기 때문에 개발자 계정으로만 로그인 테스트 가능합니다.

반응형