안녕하세요! 


오늘도 삽질로 고통받았습니다... 안드로이드가 쉽지가 않네요.


예전에 카카오톡 로그인때문에 고통받았던 제 모습이 생각나서


고통을 조금이라도 일찍 해소해 드리기 위해


쉬지않고 바로 포스팅 달려보도록 하겠습니다!




카카오 로그인을 위해서는 KakaoSDKAdapter 가 있어야 합니다.


고수분들은 필요한것만 골라서 오버라이딩 해서 쓰는것으로 예상되지만 저는 아직 잘 모르기에


통짜로 복붙했습니다.. 허허


package com.example.hp.ee;

/**
* Created by hp on 2016-01-26.
*/

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;

/**
* @author leoshin on 15. 9. 15.
*/
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_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();
}
};
}
}
 

다음과 같이 KakaoSDKAdapter 를 만들어주면 GlobalApplication 에 빨간 밑줄이 그어져 있을것입니다.


GlobalApplication 도 카카오 로그인에 필요하므로 추가해주어야 합니다.

/**
* Created by hp on 2016-01-26.
*/

import android.app.Activity;
import android.app.Application;

import com.kakao.auth.KakaoSDK;

/**
* 이미지를 캐시를 앱 수준에서 관리하기 위한 애플리케이션 객체이다.
* 로그인 기반 샘플앱에서 사용한다.
*
* @author MJ
*/
public class GlobalApplication extends Application {
private static volatile GlobalApplication instance = null;
private static volatile Activity currentActivity = null;

@Override
public void onCreate() {
super.onCreate();
instance = this;

KakaoSDK.init(new KakaoSDKAdapter());
}

public static Activity getCurrentActivity() {
return currentActivity;
}

public static void setCurrentActivity(Activity currentActivity) {
GlobalApplication.currentActivity = currentActivity;
}

/**
* singleton 애플리케이션 객체를 얻는다.
* @return singleton 애플리케이션 객체
*/
public static GlobalApplication getGlobalApplicationContext() {
if(instance == null)
throw new IllegalStateException("this application does not inherit com.kakao.GlobalApplication");
return instance;
}

/**
* 애플리케이션 종료시 singleton 어플리케이션 객체 초기화한다.
*/
@Override
public void onTerminate() {
super.onTerminate();
instance = null;
}
}
 


GlobalApplication을 AndroidManifest.xml에 다음과 같이 추가시켜줍니다.


<application
android:name=".GlobalApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"

이 과정들이 끝나면 아름답게 로그인이 될것입니다!


로그인버튼에 ID값으로 onClick을 넣어주지 않아도 LoginButton이 알아서 로그인을 다 해줍니다.


허허 신기하네요... 좀 더 공부한다음 다시 깊게 파보겠습니다!



로그인을 했으면 로그인 한 유저의 정보값을 얻을 수 있는데요


이는 KakaoSignupActivity의 RequestMe()함수에서


protected void requestMe() {
UserManagement.requestMe(new MeResponseCallback() {
@Override
public void onFailure(ErrorResult errorResult) {
String message = "failed to get user info. msg=" + errorResult;
Logger.d(message);

ErrorCode result = ErrorCode.valueOf(errorResult.getErrorCode());
if (result == ErrorCode.CLIENT_ERROR_CODE) {
finish();
} else {
redirectLoginActivity();
}
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
redirectLoginActivity();
}

@Override
public void onNotSignedUp() {
}

@Override
public void onSuccess(UserProfile userProfile) {
String kakaoID = String.valueOf(userProfile.getId()); // userProfile에서 ID값을 가져옴
String kakaoNickname = userProfile.getNickname(); // Nickname 값을 가져옴
Logger.d("UserProfile : " + userProfile);
redirectMainActivity(); // 로그인 성공시 MainActivity
}
});
}

다음과 같이 userProfile.get??() 로 가져올 수 있습니다!!


이거 찾으라 삽질했던 기억이 나네요 ㅋㅋㅋ 


이를 이용해서 DB에 정보를 넣을 수 있을것입니다.


추가적인 정보를 넣는 방법은 카카오 개발 가이드에 자세하게 나와있습니다.



앱 구현 인턴을 하면서 카카오 로그인 기능을 구현하기 위해 이것 저것 뜯어보며 


깨알같이 카카오 로그인을 구현하게 되었습니다.


비록 함수에 대한 설명은 없지만...  콜백에 대해서 더 공부를 하여 무슨 원리로 구동되는지


꼭 공부를 해서 다시 포스팅 해보도록 하겠습니다!


저와 같은 학생들에게 조금이나마 도움이 되었으면 좋겠습니다.



이상 카카오 로그인 포스팅을 끝내겠습니다.


감사합니다!



+ Recent posts