본문 바로가기
MOBILE/Android

안드로이드 카카오 API 로그인 추가하기

by 지구 2018. 8. 7.

android 에서 KaKao Login API 를 이용하여 어플을 만들어보자




* 사용방법 *

1. Gradle (Project : XX) 파일의 allprojects - repositories 안에 아래 두 줄을 추가한다. > 실행환경 구성1

1
2
3
//kakao
mavenCentral()
maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
cs


2. Gradle (Module: app) 파일의 dependencies 안에 아래 한 줄을 추가한다. > 실행환경 구성2

1
2
//KaKao Login
implementation group: project.KAKAO_SDK_GROUP, name: 'usermgmt', version: project.KAKAO_SDK_VERSION
cs


3. gradle.properties 파일 하단에 아래 두 줄도 추가한다. > 실행환경 구성3

1
2
3
#KaKao Login
KAKAO_SDK_GROUP=com.kakao.sdk
KAKAO_SDK_VERSION=1.1.7
cs


4. 로그인하는 화면 xml 에 버튼 추가 > 해당 코드는 일반 커스텀 버튼에 카카오 버튼을 추가함 (카카오 버튼은 visibility 를 gone 으로 꼭!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<Button
    android:id="@+id/login_kakao"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_gravity="center"
    android:layout_marginRight="2dp"
    android:layout_weight="1"
    android:background="@color/kakao_bg"
    android:drawableLeft="@drawable/login_kakao"
    android:paddingRight="10dp"
    android:text="카카오 로그인"
    android:textColor="@color/kakao"
    android:textSize="5pt" />
 
<com.kakao.usermgmt.LoginButton
    android:id="@+id/login_kakao_real"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:visibility="gone" />
cs


5. 카카오 로그인 기능을 구현하기 위해 GlobalApplication 클래스 추가

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
package com.nadri.api;
 
import android.app.Activity;
import android.app.Application;
 
import com.kakao.auth.KakaoSDK;
 
public class GlobalApplication extends Application {
 
    private static volatile GlobalApplication obj = null;
    private static volatile Activity currentActivity = null;
 
    @Override
    public void onCreate() {
        super.onCreate();
        obj = this;
        KakaoSDK.init(new KakaoSDKAdapter());
    }
 
    public static GlobalApplication getGlobalApplicationContext() {
        return obj;
    }
 
    public static Activity getCurrentActivity() {
        return currentActivity;
    }
 
    // Activity가 올라올때마다 Activity의 onCreate에서 호출해줘야한다.
    public static void setCurrentActivity(Activity currentActivity) {
        GlobalApplication.currentActivity = currentActivity;
    }
}
cs


6. 방금 추가한 GlobalApplication 을 AndroidManifest.xml 에 application 태그 속성안에 아래 구문도 추가해준다. > 패키지명 주의!

1
android:name=".api.GlobalApplication"
cs


7. 카카오 로그인 기능을 구현하기 위해 KaKaoSDKAdapter 클래스 추가

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
55
56
57
58
package com.nadri.api;
 
import android.app.Activity;
import android.content.Context;
 
import com.kakao.auth.ApprovalType;
import com.kakao.auth.AuthType;
import com.kakao.auth.IApplicationConfig;
import com.kakao.auth.ISessionConfig;
import com.kakao.auth.KakaoAdapter;
 
public 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_ACCOUNT};
            }
 
            @Override
            public boolean isUsingWebviewTimer() {
                return false;
            }
 
 
            @Override
            public ApprovalType getApprovalType() {
                return ApprovalType.INDIVIDUAL;
            }
 
            @Override
            public boolean isSaveFormData() {
                return true;
            }
        };
    }
 
    @Override
    public IApplicationConfig getApplicationConfig() {
        return new IApplicationConfig() {
            @Override
            public Activity getTopActivity() {
                return GlobalApplication.getCurrentActivity();
            }
 
            @Override
            public Context getApplicationContext() {
                return GlobalApplication.getGlobalApplicationContext();
            }
        };
    }
}
cs


8. 이제, 실제 로그인을 구현 할 Activity 나 Fragment 상단에 변수를 선언해주고

1
2
3
SessionCallback callback;
Button login_kakao;
LoginButton login_kakao_real;
cs


9. Activity 든 Fragment 든 onCreate() 에 세션콜백도 선언해주고

1
2
3
//KaKao Login
callback = new SessionCallback();
Session.getCurrentSession().addCallback(callback);
cs


10. 로그인 버튼을 클릭했을 때의 리스너를 등록해준다. > 위에서 가짜 버튼을 추가했으니 performClick() 메소드를 꼭 써줘야 한다.

1
2
3
4
5
6
7
8
9
//카카오 로그인
login_kakao = (Button)getView().findViewById(R.id.login_kakao);
login_kakao.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        login_kakao_real.performClick();
    }
});
login_kakao_real = (LoginButton)getView().findViewById(R.id.login_kakao_real);
cs


11. 마지막으로 맨 하단에 SessionCallback 메소드까지 정의해주면 끝 !

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
//KaKao Login
private class SessionCallback implements ISessionCallback {
        @Override
        public void onSessionOpened() {
            UserManagement.requestMe(new MeResponseCallback() {
                @Override
                public void onFailure(ErrorResult errorResult) {
                    String message = "failed to get user info. msg=" + errorResult;
                    ErrorCode result = ErrorCode.valueOf(errorResult.getErrorCode());
                    if (result == ErrorCode.CLIENT_ERROR_CODE) {
                        //에러로 인한 로그인 실패
                        //finish();
                    } else {
                        //redirectMainActivity();
                    }
                }
                @Override
                public void onSessionClosed(ErrorResult errorResult) {
                }
                @Override
                public void onNotSignedUp() {
 
                }
                @Override
                public void onSuccess(UserProfile userProfile) {
                    //로그인에 성공하면 로그인한 사용자의 일련번호, 닉네임, 이미지url등을 리턴합니다.
                    //사용자 ID는 보안상의 문제로 제공하지 않고 일련번호는 제공합니다.
                    Log.e("UserProfile", userProfile.toString());
                    Log.e("UserProfile", userProfile.getId() + "");
                    long number = userProfile.getId();
                }
            });
 
        }
        @Override
        public void onSessionOpenFailed(KakaoException exception) {
            // 세션 연결이 실패했을때
            // 어쩔때 실패되는지는 테스트를 안해보았음 ㅜㅜ
        }
//end.of.sessionCallback
cs


반응형

댓글