안녕하세요! 


어제에 이어서 오늘도 달려보겠습니다.


먼저 카카오SDK의 샘플 앱을 보겠습니다.


















안을 살펴보면 OnCreate 안에


1
2
callback = new SessionCallback();
Session.getCurrentSession().addCallback(callback);
cs


이 두가지 매우 중요한 함수들이 있습니다. 이 콜백을 꼭 선언해주어야 합니다.





저는 다음과 같이 LoginActivity 에서 MainActivity로 넘어가도록 구현해 보겠습니다.


LoginActivity의 코드는 다음과 같습니다.  이 코드들은 SampleLoginActivity 에서 얻을 수 있습니다.

package com.example.hp.ee;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.kakao.auth.ISessionCallback;
import com.kakao.auth.Session;
import com.kakao.util.exception.KakaoException;
import com.kakao.util.helper.log.Logger;

/**
* Created by hp on 2016-01-26.
*/
public class LoginActivity extends Activity {

private SessionCallback callback; //콜백 선언

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

callback = new SessionCallback(); // 이 두개의 함수 중요함
Session.getCurrentSession().addCallback(callback);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onDestroy() {
super.onDestroy();
Session.getCurrentSession().removeCallback(callback);
}

private class SessionCallback implements ISessionCallback {

@Override
public void onSessionOpened() {
redirectSignupActivity(); // 세션 연결성공 시 redirectSignupActivity() 호출
}

@Override
public void onSessionOpenFailed(KakaoException exception) {
if(exception != null) {
Logger.e(exception);
}
setContentView(R.layout.activity_login); // 세션 연결이 실패했을때
} // 로그인화면을 다시 불러옴
}

protected void redirectSignupActivity() { //세션 연결 성공 시 SignupActivity로 넘김
final Intent intent = new Intent(this, KakaoSignupActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
finish();
}

}


현재 구현중이신 LoginActivity 화면에 다음과 같은 코드를 넣어주시면 됩니다!


 

다음으로 kakaoSignupActivity를 보겠습니다.


다음과 같이 Activity를 만들어줍니다.


package com.example.hp.ee;

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

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.kakao.auth.ApiResponseCallback;
import com.kakao.auth.ErrorCode;
import com.kakao.network.ErrorResult;
import com.kakao.usermgmt.UserManagement;
import com.kakao.usermgmt.callback.MeResponseCallback;
import com.kakao.usermgmt.response.model.UserProfile;

import com.kakao.util.helper.log.Logger;

public class KakaoSignupActivity extends Activity{
/**
* Main으로 넘길지 가입 페이지를 그릴지 판단하기 위해 me를 호출한다.
* @param savedInstanceState 기존 session 정보가 저장된 객체
*/

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestMe();
}

/**
* 사용자의 상태를 알아 보기 위해 me API 호출을 한다.
*/
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() {} // 카카오톡 회원이 아닐 시 showSignup(); 호출해야함

@Override
public void onSuccess(UserProfile userProfile) { //성공 시 userProfile 형태로 반환
Logger.d("UserProfile : " + userProfile);
redirectMainActivity(); // 로그인 성공시 MainActivity
}
});
}

private void redirectMainActivity() {
startActivity(new Intent(this, MainActivity.class));
finish();
}
protected void redirectLoginActivity() {
final Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
finish();
}

}
 


다음으로 로그인 버튼을 만들어보겠습니다!


activity_login.xml 파일에 다음과 같은 코드를 추가합니다.


<com.kakao.usermgmt.LoginButton
android:id="@+id/com_kakao_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="30dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"/>




그럼 다음과 같은 친숙한 카카오 로그인 버튼을 볼 수 있습니다.


다음으로는 로그인을 위한 카카오 SDK 와 GlobalApplication 을 구현해보도록 하겠습니다!

+ Recent posts