티스토리 뷰
안녕하세요. 감자코딩에 감자개발자입니다.
이번에 살펴볼 기능은 안드로이드로 Kakaotalk 로그인연동하기입니다.
1. 가장 첫번째로, https://developers.kakao.com/ 카카오톡 개발자 사이트로 이동합니다.
이동한후, 가장먼저 해야할것은 프로젝트를 등록하고 Hash값을 등록해야합니다.
2. 그런데, 과연 Hash값을 어떻게 얻을까 궁금해 하시는분들이 있을것입니다.
그 방법은 약 2가지 방법이 있으나, 제가 여기서 보여드리는 방법은 안드로이드 코드내에서 소스코드를 추출해보도록 하겠습니다.
1234567891011121314 private void getHashKey(){try { // 패키지이름을 입력해줍니다.PackageInfo info = getPackageManager().getPackageInfo("com.example", PackageManager.GET_SIGNATURES);for (Signature signature : info.signatures) {MessageDigest md = MessageDigest.getInstance("SHA");md.update(signature.toByteArray());Log.d(TAG,"key_hash="+ Base64.encodeToString(md.digest(), Base64.DEFAULT));}} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}cs
다음의 소스코드를 호출하면, log값으로 자신의 Hash Values를 뽑아내는것을 확인할 수 있습니다.
이렇게 생성된 Hash값으로 모바일 플랫폼안의 Hash값으로 입력해줍니다.
3. 이제 Kakao Developer로 가서 사용자 관리를 OFF -> ON으로 해줍니다.
4. 카카오톡에서 로그인을 사용하기위해서는 카카오톡에서 제공하는 SDK를 추가해줍니다.
위치는 Gradle(Project) 입니다.
1234567891011 allprojects {repositories {google()jcenter()//kakaomavenCentral()maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/'}}}cs
5. 그다음에는 gradle.properties에 값을 추가해줍니다.
12 KAKAO_SDK_GROUP=com.kakao.sdkKAKAO_SDK_VERSION=1.1.7cs
6. 그다음 module:gradle(app)에 추가 할 내용입니다.
123 dependencies {compile group: project.KAKAO_SDK_GROUP, name: 'usermgmt', version: project.KAKAO_SDK_VERSION}cs
7. 이제 서버 통신을 위하여 AndroidManifest.xml 에 추가를 해주겠습니다.
123456789101112 <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example"><meta-dataandroid:name="com.kakao.sdk.AppKey" // 자신의 패키지를 쓰는것이 아닙니다. 저렇게 똑같이써줍니다.android:value="@string/kakao_app_key" /></application></manifest>cs
8. 여기서부터 이제 JAVA 파일을 생성해주겠습니다. GlobalApplication.java 추가
12345678910111213141516171819202122232425 public class GlobalApplication extends Application {private static volatile GlobalApplication obj = null;private static volatile Activity currentActivity = null;@Overridepublic 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
9.KaKaoSDKAdapter.java를 추가해주도록 하겠습니다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445 public class KakaoSDKAdapter extends KakaoAdapter {/*** Session Config에 대해서는 default값들이 존재한다.* 필요한 상황에서만 override해서 사용하면 됨.* @return Session의 설정값.*/@Overridepublic ISessionConfig getSessionConfig() {return new ISessionConfig() {@Overridepublic AuthType[] getAuthTypes() {return new AuthType[] {AuthType.KAKAO_ACCOUNT};}@Overridepublic boolean isUsingWebviewTimer() {return false;}@Overridepublic ApprovalType getApprovalType() {return ApprovalType.INDIVIDUAL;}@Overridepublic boolean isSaveFormData() {return true;}};}@Overridepublic IApplicationConfig getApplicationConfig() {return new IApplicationConfig() {@Overridepublic Activity getTopActivity() {return GlobalApplication.getCurrentActivity();}@Overridepublic Context getApplicationContext() {return GlobalApplication.getGlobalApplicationContext();}};}}cs
10. 이제 이렇게 만든 Java코드를 AndroidManifest.xml 에 추가 할 내용입니다.
1234 <applicationandroid:name=".GlobalApplication"> // 다음을 추가해줍니다.cs
11. 이제 MainActivity.java에 콜백 내부클래스를 추가합니다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 class SessionCallback implements ISessionCallback {@Overridepublic void onSessionOpened() {UserManagement.requestMe(new MeResponseCallback() {@Overridepublic 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();}}@Overridepublic void onSessionClosed(ErrorResult errorResult) {}@Overridepublic void onNotSignedUp() {}@Overridepublic void onSuccess(UserProfile userProfile) {//로그인에 성공하면 로그인한 사용자의 일련번호, 닉네임, 이미지url등을 리턴합니다.//사용자 ID는 보안상의 문제로 제공하지 않고 일련번호는 제공합니다.// Log.e("UserProfile", userProfile.toString());// Log.e("UserProfile", userProfile.getId() + "");long number = userProfile.getId();}});}// 세션 실패시@Overridepublic void onSessionOpenFailed(KakaoException exception) {}}cs
12. 이제 Main에서 콜백클래스를 초기화해주는 역할을 합니다.
123456789101112131415 public class MainActivity extends AppCompatActivity {private static final String TAG = "";SessionCallback callback;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// getHashKey();setContentView(R.layout.activity_main);callback = new SessionCallback();Session.getCurrentSession().addCallback(callback);requestMe();}cs
13. 이제 XML파일을 수정해보겠습니다. 카카오톡 버튼이 보이게하려면 필요하겠죠?
12345678910111213141516171819 <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example"><com.kakao.usermgmt.LoginButtonandroid:id="@+id/com_kakao_login"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:layout_marginBottom="30dp"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"/></android.support.constraint.ConstraintLayout>cs
14. 이제 유저정보를 가져오는 메소드를 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public void requestMe() { //유저의 정보를 받아오는 함수 UserManagement.requestMe(new MeResponseCallback() { @Override public void onFailure(ErrorResult errorResult) { Log.e(TAG, "error message=" + errorResult); // super.onFailure(errorResult); } @Override public void onSessionClosed(ErrorResult errorResult) { Log.d(TAG, "onSessionClosed1 =" + errorResult); } @Override public void onNotSignedUp() { //카카오톡 회원이 아닐시 Log.d(TAG, "onNotSignedUp "); } @Override public void onSuccess(UserProfile result) { Log.e("UserProfile", result.toString()); Log.e("UserProfile", result.getId() + ""); } }); } | cs |
15. 이제 마지막으로 res/values 에 xml kakao_string.xml 파일을 추가해줍니다.
123 <resources><string name="app_name">여기에 Developer에서 발급받은 네이티브 값을 넣어야해요.</string> // Native Values</resources>cs
16. Clean Project를 통해서 프로젝트를 깔끔하게 정리한번해주고 이제 실행을 해봅시다.
이렇게 카카오톡 로그인 연동을 살펴보았습니다.
간단하게 잘써먹을수 있게 코드리뷰형식으로 많이 작성하였습니다.^^
+ 추가로 버튼을 커스텀하기 위해서는 Kakao Developer에 나와있는 로고에 훼손가지 않는선에서 개인이 바꿀 수 있는것으로 알고있습니다. 따라서 커스텀하실 때 이것에 유의해서 작성해주시면 될 것 같습니다.
자세한 사항은 Developer.kakao.com 에 더욱더 자세하게 나와있습니다.
문의해보시는것이 빠르고 정확할 것이라고 생각이 듭니다.
지금까지 감자코딩에 감자개발자였습니다. 감사합니다.
'Android' 카테고리의 다른 글
[안드로이드] AAR 라이브러리 파일 열기(내용확인하기) (0) | 2018.08.01 |
---|---|
[Android] SQLite 정의 및 회원가입 예제 (2) | 2017.11.15 |
[Android] 액션바를 탭과 함께 보여 주기 예제 (0) | 2017.09.25 |
[Android]액션바와 탭 사용하기 (0) | 2017.09.25 |
[Android] Viewer 만들기(뷰어만들기) (0) | 2017.09.24 |
- Total
- Today
- Yesterday
- 알고리즘
- C언어
- 코드엔진
- 감자개발자
- BFS
- 안드로이드
- TensorFlow
- 감자코딩
- C langauge
- 초보자를 위한 C언어 300제
- 개발하는 관광이
- 노드
- 백준
- 백준알고리즘
- Algorigm
- Spring
- MVC
- node
- 복습
- Controller
- 텐서플로우
- 머신러닝
- 프로그래밍
- 스프링
- db
- 리버싱
- 학교
- programming
- Android
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |