티스토리 뷰


카카오톡 로그인 구현 5분이면 가능합니다.

하지만 공식사이트 문서등이 조금 난해하게(?) 부실한 면이 있는데요, 일단 최신 SDK를 기준으로 설명되지 않아서

일부 혼란이 있습니다


그래서, kakao SDK 1.1.14 (2016.03.19 기준) 최신버전을 기준으로 로그인을 구현해 봅니다.

( 모든 소스코드는 github에 공개되어 있습니다. )


본 예제는 로그인요청 버튼을 카카오에서 제공하는게 아닌 커스텀하여 사용할 수 있도록 구현합니다.


샘플 소스코드 다운로드



1. AndroidManifest.xml 

<meta-data android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key" />




2. KakaoSDKAdapter.java

public class KakaoSDKAdapter extends KakaoAdapter {


    @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 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();

            }

        };

    }

}




3. GlobalApplication.java

KakaoSDK.init(new KakaoSDKAdapter());




4. 로그인 요청 버튼 구현

private SessionCallback mKakaocallback;



// 로그인 요청 버튼용

 private void isKakaoLogin() {

        // 카카오 세션을 오픈한다

        mKakaocallback = new SessionCallback();

        com.kakao.auth.Session.getCurrentSession().addCallback(mKakaocallback);

        com.kakao.auth.Session.getCurrentSession().checkAndImplicitOpen();

        com.kakao.auth.Session.getCurrentSession().open(AuthType.KAKAO_TALK_EXCLUDE_NATIVE_LOGIN, KakaoTalkMainActivity.this);

}




5. SessionCallback 처리

private class SessionCallback implements ISessionCallback {

        @Override

        public void onSessionOpened() {

            Log.d("TAG" , "세션 오픈됨");

            // 사용자 정보를 가져옴, 회원가입 미가입시 자동가입 시킴

            KakaorequestMe();

        }


        @Override

        public void onSessionOpenFailed(KakaoException exception) {

            if(exception != null) {

                Log.d("TAG" , exception.getMessage());

            }

        }

    }




6. 사용자 정보 획득

protected void KakaorequestMe() {

        UserManagement.requestMe(new MeResponseCallback() {

            @Override

            public void onFailure(ErrorResult errorResult) {

                int ErrorCode = errorResult.getErrorCode();

                int ClientErrorCode = -777;


                if (ErrorCode == ClientErrorCode) {

                    Toast.makeText(getApplicationContext(), "카카오톡 서버의 네트워크가 불안정합니다. 잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show();

                } else {

                    Log.d("TAG" , "오류로 카카오로그인 실패 ");

                }

            }


            @Override

            public void onSessionClosed(ErrorResult errorResult) {

                Log.d("TAG" , "오류로 카카오로그인 실패 ");

            }


            @Override

            public void onSuccess(UserProfile userProfile) {

 // 사용자정보 추출(완료)

                profileUrl = userProfile.getProfileImagePath();

                userId = String.valueOf(userProfile.getId());

                userName = userProfile.getNickname();

            }


            @Override

            public void onNotSignedUp() {

                // 자동가입이 아닐경우 동의창

            }

        });

    }





끝입니다. 간단하죠?

SNS 로그인 자체가 어려운건 하나도 없습니다 차근차근 따라해보시면 바로 결과가 나오실거에요 :)

아! 참고로 키 해시 를 카카오 개발자센터에 등록해주셔야 합니다.

키 해시 추출은 샘플코드내의 getAppKeyHash() 를통해 추출가능합니다~


감사합니다.
















댓글
  • 프로필사진 칼즘 안녕하세요 카카오톡 로그인 연동 구현중인데 유익한 정보 감사합니다.
    다만.. 올려주신 샘플코드도 돌려보고 제가 현재 만들고있는 프로젝트로 옮겨 실행해봐도
    '로그창에 세션정보 오픈됨'까지는 출력되는데 다음 반응이 없네요ㅠㅠ
    2016.03.22 00:56 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom kakao_app_key 변경하셨는지 확인해보시구요
    카카오개발자센터에 헤쉬키를 등록하셨는지 확인해주세요
    2016.03.24 14:10 신고
  • 프로필사진 비밀댓글입니다 2016.04.14 00:57
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요~ 답변이 늦어서 죄송해요
    KakaoLoginSample 만 이용하셔서 해보시면됩니다
    SDK 는 라이브러리를 직접 붙이는 방식을 위해 있기때문에 사용하지 않으셔도되요 :)
    2016.04.21 09:43 신고
  • 프로필사진 개발자 혹시 이클립스용 샘플소스도 있나요? 2016.04.26 11:47 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 이클립스용은 없습니다.
    카카오 개발자센터 공식홈에 가시면 이클립스용 샘플이 있으니 그걸 참고해보세요 :)
    2016.05.02 12:47 신고
  • 프로필사진 어렵습니다 개발자님 버튼을 눌러도 다음창이 안나옵니다.. 2016.05.09 20:55 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 카카오 API KEY 와 Key Hash는 등록해주셨나요? 2016.05.16 10:34 신고
  • 프로필사진 정준영 카카오 API KEY와 Key Hash 전부 등록 하였고 카카오계정 로그인 창에서 동의를 눌렀는데 그다음 onsuccess 함수가 동작하지 않습니다.. hash key 는 get app hashkey 함수를 통해서 받은 해쉬키를 등록하였습니다.. 이것때문에 3일동안 제자리걸음이네요 ㅠㅠ 도와주세요 개발자님.. 2016.07.12 19:53 신고
  • 프로필사진 최진규 저도 위에분처럼 콜백리스너가 동작하지 않았는데..보니
    onActivityResult 함수안에
    if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
    return;
    }
    이코드가 추가되어야 되네요..

    샘플코드에 위코드가 빠져있어요~
    2016.09.20 19:00 신고
  • 프로필사진 왕초보님임 맨땅에 헤딩하고 있는 초자 개발자로서는 다소 어려움이 있습니다.
    라이브러리 추가하는 방법도요....ㅋㅋㅋㅋ
    2016.10.20 22:53 신고
  • 프로필사진 박경환 import com.kakao.auth.KakaoSDK 안되는 이유가 뭘까요?
    임포트가 안되니 KakoSDK.init(new KakaoSDKAdapter());
    이부분이 에러납니다 !
    2017.01.18 10:59 신고
댓글쓰기 폼