GlobalApplication.java
public class GlobalApplication extends Application {
private static volatile GlobalApplication instance = null;
private static 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};
/*로그인을 하는 방식을 지정하는 부분. AuthType로는 다음 네 가지 방식이 있다.
KAKAO_TALK: 카카오톡으로 로그인, KAKAO_STORY: 카카오스토리로 로그인, KAKAO_ACCOUNT: 웹뷰를 통한 로그인,
KAKAO_TALK_EXCLUDE_NATIVE_LOGIN: 카카오톡으로만 로그인+계정 없으면 계정생성 버튼 제공
KAKAO_LOGIN_ALL: 모든 로그인방식 사용 가능. 정확히는, 카카오톡이나 카카오스토리가 있으면 그 쪽으로 로그인 기능을 제공하고, 둘 다 없으면 웹뷰를 통한 로그인을 제공한다.
안드로이드 스튜디오에서는 둘 다 없으므로 웹뷰 형태로 뜨게된다.
*/
}
@Override
public boolean isUsingWebviewTimer() {
return false;
}
@Override
public boolean isSecureMode() {
return false;
}
@Override
public ApprovalType getApprovalType() {
return ApprovalType.INDIVIDUAL;
}
@Override
public boolean isSaveFormData() {
return true;
// Kakao SDK 에서 사용되는 WebView에서 email 입력폼의 데이터를 저장할지 여부를 결정한다.
// true일 경우, 다음번에 다시 로그인 시 email 폼을 누르면 이전에 입력했던 이메일이 나타난다.
}
};
}
@Override
public IApplicationConfig getApplicationConfig() {
return new IApplicationConfig() {
@Override
public Context getApplicationContext() {
return GlobalApplication.getGlobalApplicationContext();
}
};
}
}
public static GlobalApplication getGlobalApplicationContext() {
if(instance == null) {
throw new IllegalStateException("this application does not inherit com.kakao.GlobalApplication");
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
KakaoSDK.init(new KakaoSDKAdapter());
}
@Override
public void onTerminate() {
super.onTerminate();
instance = null;
}
}
세션 관리페이지
public class LoginFirst extends AppCompatActivity {
private SessionCallback sessionCallback;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loginfirst);
sessionCallback = new SessionCallback();
Session.getCurrentSession().addCallback(sessionCallback);
Session.getCurrentSession().checkAndImplicitOpen();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
return;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Session.getCurrentSession().removeCallback(sessionCallback);
}
private class SessionCallback implements ISessionCallback {
@Override
public void onSessionOpened() {
UserManagement.getInstance().me(new MeV2ResponseCallback() {
@Override
public void onFailure(ErrorResult errorResult) {
int result = errorResult.getErrorCode();
if(result == ApiErrorCode.CLIENT_ERROR_CODE) {
Toast.makeText(getApplicationContext(), "네트워크 연결이 불안정합니다. 다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(getApplicationContext(),"로그인 도중 오류가 발생했습니다: "+errorResult.getErrorMessage(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
Toast.makeText(getApplicationContext(),"세션이 닫혔습니다. 다시 시도해 주세요: "+errorResult.getErrorMessage(),Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(MeV2Response result) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("name", result.getNickname());
intent.putExtra("profile", result.getProfileImagePath());
startActivity(intent);
finish();
}
});
}
@Override
public void onSessionOpenFailed(KakaoException e) {
Toast.makeText(getApplicationContext(), "로그인 도중 오류가 발생했습니다. 인터넷 연결을 확인해주세요: "+e.toString(), Toast.LENGTH_SHORT).show();
}
}
}
'모바일 > 소스' 카테고리의 다른 글
안드로이드 + 카카오 로그인 연동 ( 프로젝트 파일 ) (0) | 2020.02.18 |
---|