1. 원래 카카오 sdk는 쓰기 어렵거나

2. 쓰기는 쉬운데, 설명을 이해하기 참~ 쉽게 잘 해놨거나

3. 설명이 진정 쉬운데 내가 멍청해서(국어든 코딩이든) 이해를 못하거나


이 셋 중에 무엇이 참인 명제인지 엄청 고민을 하다가 검색을 하고 문제를 해결하게 되었다.


// 선 레퍼런스 : https://developers.kakao.com/docs/android


이 글을 찾아온 사람이라면 위 문서로는 구현은커녕 임포트조차 어떻게 하는지 잘 모르겠는 경우일 것이다. 나 또한 그랬으니까...


이전 이클립스에서는 어떻게 했는지 모르겠지만 (이 경우는 이미 인터넷에 많은 자료가 있다), 스튜디오로 바뀌면서 약간씩 바뀐 것 같다.


그래서 나 같이 스튜디오로 안드 개발을 시작한 사람은 환경이 달라 어떻게 적용해야 할지 잘 모를 수도 있다.


그런 사람들과 미래의 다른 프로젝트를 시작하는 나를 위해 적어놓는다.




우선, 카카오의 개발 커뮤니티에 벌써 나와 비슷한 어려움을 겪고 그 해결책을 공유해주신 고마운 분들이 계시다.


이 글 또한 그 분들의 노고를 참고하고 적용하여 내 나름대로 다시 정리한 것이다.


원 글 출처는 하단에 첨부해두었다. 레퍼런스보다는 설명이 잘 되어 있어서 출처로 바로 가서 그걸 보고 적용하여도 큰 문제는 없을 것이다.



1. 모듈이 아닌 프로젝트의 /build.gradle을 열어 allprojects에 다음을 추가한다.
mavenCentral()
maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }

2. 다른 gradle에서 가져다 쓰기 위해 다음을 /gradle.properties 에 정의한다.

원문의 경우 버전이 1.0.40이었지만 현재 최신 버전은 50이다. 각자 현재의 최신 버전을 적어주도록 하자.

KAKAO_SDK_GROUP=com.kakao.sdk

KAKAO_SDK_VERSION=1.0.50


3. 모듈(app)의 /app/build.gradle 의 dependencies에 다음을 추가한다.

compile group: project.KAKAO_SDK_GROUP, name: '__모듈명__', version: project.KAKAO_SDK_VERSION

원문은 카카오링크 사용을 위해 kakaolink로 예시를 보여줬는데, 나는 사용자 로그인을 구현하기 위함이니 usermgmt로 추가하였다. 각자 필요로 하는 모듈명으로 추가해주면 될 것이다.

나머지 모듈명은 sdk의 sample 안의 각 모듈의 build.gradle을 보면 나와있다. (폴더명과 동일)


4. /app/AndroidManifest.xml에서 카카오 앱 키를 추가한다.

카카오 api 키를 받는 방법은 레퍼런스에도 나와있고 그다지 어렵지 않다.

4개가 있는데 가장 위의 네이티브 앱 키를 복사해서 붙여넣는다.

<meta-data android:name="com.kakao.sdk.AppKey"

              android:value="__카카오 api key__" />

위치는 application element의 자식에 (즉, activity와 같은 depth) 추가한다.


5. /app/build.gradle에 packagingOptions 를 추가한다.

packagingOptions {

    exclude 'META-INF/LICENSE'

    exclude 'META-INF/NOTICE'

}

4번까지 하면 다 된 것 같은데 실제 디버그를 돌려보면 패키징 중에 무슨 jackson-*.jar 가 duplicate되었다고 오류를 내뱉으며 안될 것이다.

이럴 경우 위의 구문을 /app/build.gradle에서 android element의 자식에 (즉, defaultConfig와 buildTypes와 같은 depth) 추가한다.



import는 여기까지면 충분하다. 이제 good to go!

여기서부터 밑의 내용은 나 혼자서 이해한 내용을 적은거라 틀릴 수도 있으니 적당히 잘 걸러 듣기를 바란다.




6. 실제 activity에 구현

카카오 링크를 쓰는 방법은 원 글에 잘 나와있고, 나는 카카오 계정을 이용한 로그인 기능을 쓸 것이다.

나도 아직은 로그인까지밖에 학습하지 않았기에 로그인만 적도록 하겠다. 이 정도까지 왔으면 아마 카카오의 레퍼런스가 이해되고 어떻게 사용하는건지 눈에 들어오기 시작할 것이다.


초기에 sdk를 이해하는데 있어서 나를 더 어렵게 만들었던 것이 sample과 template 이었다. 카카오 문서를 위에서 문서 잘 읽다보면 이런 문구를 만나게 되는데...

3. 로그인 Activity의 예제 코드로 loginbase-template에 포함된 com.kakao.template.loginbase.SampleLoginActivity입니다.

로그인기반으로 한 샘플 usermgmt-sample, kakaostory-sample, kakaotalk-sample, push-sample의 로그인 Activity는 이를 상속하여 구현하고 있습니다.

이해한 뒤에 다시 보면 괜찮은데 처음 봤었을 때에는 loginbase는 뭐고 template은 뭐지? *-sample과는 어떤 관계지? 또, SampleLoginActiviy는 뭐야? 뭐가 진짜 샘플이고 무엇을 보고 익혀야 하는거지? 난 그냥 로그인만 하고 싶은거면 뭘 봐야 하는거지????


가뜩이나 문서도 이해하기 어렵고 샘플을 봐도 구조조차 이해가 되지 않아 다시 문서를 차근히 보는데 이 문구를 보고 미치는 줄 알았다...


그러다가 샘플에 내 앱 키를 넣고 실행시켜 이것저것 써보면서 코드를 조금씩 이해했다.


잡설이 길었고 정리...



우선, 나와 같은 로그인 기능을 쓰는 사람은 SampleLoginActivity와 SampleSignupActivity를 이해하고 그 예시를 중점적으로 보면 될 것이다.

샘플로긴액티비티는 실제 카톡 로긴 창을 띄우고, 사인업은 사용자가 우리 앱에 가입할 것인지를 물어오는 창 인 것 같다.


따라서, *-sample 앱들과 같이 위의 액티비티를 상속해서 써도 되고(그대로 호출하거나 override), 아니면 실제 저 두 액티비티 속에 구현된 메소드를 긁어와서 내 액티비티에서 그대로 사용해도 된다. 뭐가 더 나은지 dry에 대한 것은 각자 개인의 판단에 맡기도록 하겠다.


방금 두 문단이 이해가 된다면, 저 위의 카카오 문서 인용문도 이해가 될 것이다.

SampleLoginActivity에서 카카오의 로그인 api를 진짜로 사용하는 로직을 구현해놓고, 각 *-sample에서 입맛에 맞게 override해서 사용하는걸 볼 수 있다.

그러니 템플릿이라고 이름을 붙여놓은 거겠지...? 갖다 쓰라고...?


이걸 미리 알았으면 더 쉽게 이해했을텐데... 내가 멍청한 셈 치자...



그리고 잊지 말아야 할 점이 한가지 더 있는데, 다른 모듈은 모르겠지만 usermgmt를 통한 카카오 계정 로그인을 쓸 예정이라면 무조건!

는 가장 처음에 실행시켜줘야 한다.

이 연유로 템플릿의 클래스를 바로 갖다쓰면 안된다고 나올 것이다. 왜냐하면 GlobalApplication 이라는 곳에서 Session.initialize(this); 해주고 있으니까... 다른 곳에 숨어있었을 줄이야... 물론 문서에도 나오기는 하니까 할 말은 없다. 대충 읽은 내 잘못이지.

주로 카톡로긴을 쓰는 activity의 onCreate의 시작부분에 넣으면 큰 문제가 없을 것이다.


즉, 내 액티비티에서 세션 초기화를 해주고, SampleLogin의 로직을 복붙해서 쓰거나,

아니면, SampleLogin을 상속하는 액티비티를 써도 될 것이다. (후자는 위에서 초기화 필요)


결론 : 실제 가져다 쓸 모듈은 Sample*Activity... *-sample 앱들은 앞의 템플릿(Sample*Activity)을 어떻게 갖다 쓰는지 예시를 보여주는 것이다.



// 출처 : [환경] 안드로이드 스튜디오(Android Studio)에서 Gradle로 카카오톡 SDK 사용

// 참고 : [가이드] AndroidStudio를 이용한 카카오SDK import 시키기

'Projects > android' 카테고리의 다른 글

안드로이드 httpurlconnection의 user-agent  (0) 2015.05.11
Posted by 병아리

사이드바 열기