티스토리 뷰

[개발/Android] - 카카오 sdk v2 굳이 자바로 사용하기 -2 (카카오 링크 메시지)

카카오 sdk v2는 코틀린으로 가이드가 나와있습니다.

 

하지만 굳이, 아니면 어쩔 수 없이 자바로 해야되는 분들을 위해 자바로 사용하는 방법을 공유합니다.

sdk init, 앱 등록, 키발급 같은 내용은 생략합니다.

 

1. kotlin으로 카카오 로그인하기

- Login 코드

class KakaoLogin
{
    interface IKLoginResult
    {
        fun onKakaoLoginResult(user: User?)
    }
    var user:User? = null
    var listener:IKLoginResult? = null

    // 로그인 callback 구성
    val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->

        if (error != null) {
            Log.e("TAG", "로그인 실패", error)
            if(listener != null)
                listener!!.onKakaoLoginResult(null)
        }
        else if (token != null)
        {
            Log.i("TAG", "로그인 성공 ${token.accessToken}")

            UserApiClient.instance.me { user, error ->

                if (error != null)
                {
                    Log.e("TAG", "사용자 정보 요청 실패", error)
                }
                else if (user != null)
                {
                    Log.i("TAG", "사용자 정보 요청 성공" +
                            "\n회원번호: ${user.id}" +
                            "\n이메일: ${user.kakaoAccount?.email}" +
                            "\n닉네임: ${user.kakaoAccount?.profile?.nickname}" +
                            "\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}")

                    this.user = user

                    if(listener != null)
                        listener!!.onKakaoLoginResult(user)
                }
            }
        }
    }
    fun login(context: Context)
    {
        // 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
        if (LoginClient.instance.isKakaoTalkLoginAvailable(context))
            LoginClient.instance.loginWithKakaoTalk(context, callback = callback)
        else
            LoginClient.instance.loginWithKakaoAccount(context, callback = callback)
    }
 
	//로그아웃
    fun onLink() {
        UserApiClient.instance.unlink { error ->
            if (error != null) {
                Log.e("TAG", "연결 끊기 실패", error)
            }
            else {
                Log.i("TAG", "연결 끊기 성공. SDK에서 토큰 삭제 됨")

            }
        }
    }

    companion object {
        @JvmStatic
        val instance by lazy { KakaoLogin() }
    }
}

 - activity 코드

class TestKakaoActivityKotlin : AppCompatActivity(), KakaoLogin.IKLoginResult  {

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.activity_main)
        kakaoLogin()
    }
    private fun kakaoLogin() {
        KakaoLogin.instance.listener = this
        KakaoLogin.instance.login(this)
    }
    override fun onKakaoLoginResult(user: User?) {
        //콜백메서드
    }
    
}

2. Java로 카카오 로그인하기

- Login 코드

public class TestKakaoLogin {

    interface IKLoginResult{
        void onKakaoLoginResult(User user);
    }
    private static TestKakaoLogin testKakaoLogin = new TestKakaoLogin();
    IKLoginResult listener;
    public void setListener(IKLoginResult listener){
        this.listener = listener;
    }
    public static TestKakaoLogin getInstance() {
        return testKakaoLogin;
    }
    private TestKakaoLogin() {
        if (testKakaoLogin != null)
            throw new AssertionError();
    }
    private Function2<OAuthToken, Throwable, Unit> callback = new Function2<OAuthToken, Throwable, Unit> () {
        @Override
        public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {

            if (throwable != null) {
                Log.e("error",throwable.getLocalizedMessage());
            } else if (oAuthToken != null) {
                Log.i("success", "로그인 성공");
                UserApiClient.getInstance().me(new Function2<User, Throwable, Unit>() {
                    @Override
                    public Unit invoke(User user, Throwable throwable) {
                        if (user != null) {
                            listener.onKakaoLoginResult(user);

                        }
                        return null;
                    }
                });
            }
            return null;
        }
    };
    public void login(Context context) {
        if (LoginClient.getInstance().isKakaoTalkLoginAvailable(context)) {
            LoginClient.getInstance().loginWithKakaoTalk(context, callback);
        }
    }
}

- activity 코드

public class TestKakaoActivity extends AppCompatActivity implements TestKakaoLogin.IKLoginResult {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        kakaoLogin();

    }
    private void kakaoLogin() {
        TestKakaoLogin.getInstance().setListener(this);
        TestKakaoLogin.getInstance().login(this);
    }
    @Override
    public void onKakaoLoginResult(User user) {
        //콜백메서드
    }
}

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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
글 보관함