목차
1. 토큰 발급
이어서 카카오 로그인을 한 후, 발급받은 토큰을 통해 화면을 갱신하도록 했다. 이전 포스팅에서 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에 대한 공부를 좀 더 진행할 필요가 있다고 느껴서 이에 시간을 투자해보고자 한다.
참고 문헌
'Kotlin_study' 카테고리의 다른 글
[HiStory 리팩토링] LiveData에서 Flow로 전환 (0) | 2023.02.20 |
---|---|
[Kotlin] RecyclerView와 ViewModel 적용해보기 (0) | 2023.01.19 |
[HiStory 리팩토링] 2. 카카오 로그인 기능 적용 (0) | 2023.01.03 |
[HiStory 리팩토링] 1. 리팩토링을 시작하다 (0) | 2022.12.28 |
[Kotlin] Custom Calendar Library(kizitonwose) 사용하기 (0) | 2022.07.13 |