안녕하세요!
오늘도 삽질로 고통받았습니다... 안드로이드가 쉽지가 않네요.
예전에 카카오톡 로그인때문에 고통받았던 제 모습이 생각나서
고통을 조금이라도 일찍 해소해 드리기 위해
쉬지않고 바로 포스팅 달려보도록 하겠습니다!
카카오 로그인을 위해서는 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에 정보를 넣을 수 있을것입니다.
추가적인 정보를 넣는 방법은 카카오 개발 가이드에 자세하게 나와있습니다.
앱 구현 인턴을 하면서 카카오 로그인 기능을 구현하기 위해 이것 저것 뜯어보며
깨알같이 카카오 로그인을 구현하게 되었습니다.
비록 함수에 대한 설명은 없지만... 콜백에 대해서 더 공부를 하여 무슨 원리로 구동되는지
꼭 공부를 해서 다시 포스팅 해보도록 하겠습니다!
저와 같은 학생들에게 조금이나마 도움이 되었으면 좋겠습니다.
이상 카카오 로그인 포스팅을 끝내겠습니다.
감사합니다!
'안드로이드' 카테고리의 다른 글
zip exception (com/google/android/gms/internal) 오류 해결법 (1) | 2017.01.17 |
---|---|
안드로이드 - Retrofit 2를 이용한 RestAPI 통신하기 (18) | 2016.08.25 |
안드로이드 - 카카오톡 로그인 연동 part 2 (3) | 2016.01.26 |
안드로이드 - 카카오톡 로그인 연동 part 1 (4) | 2016.01.26 |