본문 바로가기

Kotlin_study

[HiStory 리팩토링] 3. 카카오 로그인 기능 적용(2)

목차
1. 토큰 발급

2. 토큰 삭제

3. 이후 계획

4. 참고문헌

 

이어서 카카오 로그인을 한 후, 발급받은 토큰을 통해 화면을 갱신하도록 했다. 이전 포스팅에서 livedata를 사용한다고 했지만, 카카오 SDK를 활용하면 더 쉽게 구현할 수 있어서 이를 통해 구현했다. 

 

1. 토큰 발급

//LoginActivity.kt
binding.loginKakaoIb.setOnClickListener {
            val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
                if (error != null) {

                } else if (token != null) {
                    exitLogin()
                }
            }
            if (UserApiClient.instance.isKakaoTalkLoginAvailable(this)) {
                UserApiClient.instance.loginWithKakaoTalk(this) { token, error ->
                    if (error != null) {
                        if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
                            return@loginWithKakaoTalk
                        }
                        UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
                    } else if (token != null) {
                        exitLogin()
                    }
                }
            } else {
                UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
            }
        }

지난번에 작성한 LoginActivity에서 카카오 로그인 토큰을 발급 받는 코드이다. 카카오톡으로 로그인이 가능하면 카카오톡으로, 아니라면 카카오 계정으로 로그인을 실행한다. 카카오 계정으로 로그인을 한 후 결과는 콜백 함수를 통해 처리된다. 

 

//HomeFragment.kt, MyPageFragment.kt
if(AuthApiClient.instance.hasToken()){
            UserApiClient.instance.me { user, error ->
                if(error != null){

                } else if (user != null) {
                    binding.myPageNickNameTv.text = user.kakaoAccount?.profile?.nickname
                }
            }
        }

hasToken() 함수를 통해 token의 여부를 확인하고, 있다면 UserApiClient를 통해 로그인 한 계정의 정보를 받아오게 했다. 


2. 토큰 삭제

private fun logout() {
        UserApiClient.instance.logout { error ->
            if(error != null){
                Log.d("logout", "로그아웃 실패", error)
            } else {
                Log.d("logout", "로그아웃 성공")
                binding.homeLoginTv.visibility = View.GONE
                binding.homeLoginIv.visibility = View.VISIBLE
            }
        }
    }

로그아웃도 위와 같이 하면 된다. hasToken() 함수를 통해 확인해보면 로그아웃 이후 false가 리턴되는 것을 확인 할 수 있다.


3. 이후 계획

코드뿐만 아니라 불필요한 화면이 많이 남아 있어 이를 지우고 새로 화면을 구성하는데에 생각보다 시간이 꽤 들었다. 그리고 우선 viewmodel과 livedata에 대한 공부를 좀 더 진행할 필요가 있다고 느껴서 이에 시간을 투자해보고자 한다.

 

참고 문헌

Android | Kakao Developers 문서