카카오톡 로그인을 커스텀으로 개발하여 사용하고 있습니다.
Session.getCurrentSession.open 을 이용하여 액티비티를 넘겨주고 로그인하는 뷰를 띄워주는데요.
테스트 폰에 카톡이 깔려 있지 않아 웹뷰가 띄워지고 카카오 계정 로그인 화면에서 꺼버린 후에는 해당 뷰를 띄운 Activity 내에서 Finish 처리를 할 수가 없고 onBackPressed도 타지 않는 상태가 되네요.
KakaoAdapter.getCurrentActivity에서 가지고 있나 확인해봤는데, Callback에서 OpenFailed를 탈 때에는 그 쪽에 넘어가진 않는 듯 하더라구요.
class LoginKakao(activity : BaseActivity) : SNSAdapter(activity) {
private val adapter = CKakaoAdapter(activity)
private var kakaoCallback = KakaoCallback()
init{
try{
KakaoSDK.init(adapter)
Session.getCurrentSession().addCallback(kakaoCallback)
}catch (e: KakaoSDK.AlreadyInitializedException){}
}
override fun run(){
Session.getCurrentSession().open(adapter.sessionConfig.authTypes[0], activity)
}
fun handleActivityResult(reqCode: Int, resultCode: Int, data: Intent?){
Session.getCurrentSession().handleActivityResult(reqCode, resultCode, data)
}
override fun setOnCompleteListener(listener: CompleteListener) {
super.setOnCompleteListener(listener)
kakaoCallback.setOnCompleteListener(listener)
}
private class KakaoCallback : ISessionCallback {
private var listener : SNSAdapter.CompleteListener? = null
override fun onSessionOpenFailed(exception: KakaoException?) {
listener?.onAuthError(L_KAKAO, "Open Failed")
}
override fun onSessionOpened() {
UserManagement.getInstance().me(object : MeV2ResponseCallback(){
override fun onSuccess(result: MeV2Response?) {
listener?.onAuthComplete()
}
override fun onSessionClosed(errorResult: ErrorResult?) {
listener?.onAuthError(L_KAKAO, "Session Closed")
}
})
}
fun setOnCompleteListener(listener : SNSAdapter.CompleteListener){
this.listener = listener
}
}
fun getCurrentActivity() = KakaoSDK.getCurrentActivity()
private class CKakaoAdapter(private val activity: BaseActivity) : KakaoAdapter(){
override fun getApplicationConfig(): IApplicationConfig = IApplicationConfig { activity.application }
override fun getSessionConfig(): ISessionConfig = object : ISessionConfig {
override fun isSaveFormData(): Boolean = true
override fun getAuthTypes(): Array<AuthType> = arrayOf(AuthType.KAKAO_LOGIN_ALL)
override fun isSecureMode(): Boolean = false
override fun getApprovalType(): ApprovalType? = ApprovalType.INDIVIDUAL
override fun isUsingWebviewTimer(): Boolean = false
}
}
}