하이브리드 앱 카카오톡 로그인 카카오톡앱에서 비로그인 상태일 때 문의

문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.

Faq 목록 - 10. Android ( Faq 목록 입니다 ) 먼저 확인해주세요.


SDK : com.kakao.sdk:v2-share:2.19.0
앱 ID : 283391

안드로이드 앱이고 웹뷰를 통해 카카오 로그인을 문서 참고하여 만들었습니다.
카카오톡 앱이 있으면 앱으로 로그인하고 없으면 로그인페이지에서 로그인을 하던데,
카카오톡 앱이 있으나 로그인이 안되어 있는 상태이면 아무런 반응이 없습니다.

어떤 처리를 해줘야 하나요?

안녕하세요.

카카오톡만 설치되고 로그인 안되었다면 카카오톡에서 Activity간통신으로 NotSupportedError에러를 전달하는데요.
iOS와 달리 Android에서는 브라우저에서 응답을 못받는 알려진 이슈가 있습니다.

인앱 브라우저의 경우 아래 예제에서 “사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,” Flow 참고하셔서 현재 카카오톡 설치 여부 및 로그인 여부에 따라

JS SDK에서 authorize로 로그인 시, throughTalk 파라메터를 false로 하신다면 카카오톡이 아닌 카카오 계정으로 로그인 할 수 있습니다.

Android 카카오 로그인 구현 예제 : Android | Kakao Developers Android

private fun overrideUrlIntent(uri: Uri, view: WebView?): Boolean {
        if (uri.scheme == "intent") {
            try {
                val intent = Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME)

                // 실행 가능한 앱이 있으면 앱 실행
                view?.context?.let { context ->
                    if (intent.resolveActivity(context.packageManager) != null) {
                        context.startActivity(intent)
                        Timber.d("ACTIVITY: ${intent.action}")
                        return true
                    }
                }

                // Fallback URL이 있으면 현재 웹뷰에 로딩
                val fallbackUrl = intent.getStringExtra("browser_fallback_url")
                if (fallbackUrl != null) {
                    view?.loadUrl(fallbackUrl)
                    Timber.d("FALLBACK: $fallbackUrl")
                    return true
                }

                Timber.e("Could not parse anythings\nuri= $uri")
            } catch (e: URISyntaxException) {
                Timber.e("Invalid intent request", e)
            }
        }
        return false
    }

에서 startActivity로 인텐트 전달하는 것 말고 result를 받도록 하면 혹시 result로 error를 받을 수 있나요?

앞서 안내드린것 처럼 Activity간통신으로 카카오톡앱에서 NotSupportedError에러를 전달하지만, 안드로이드 OS 특성상 브라우저는 해당 에러 응답을 받을 수 없습니다.

그래서 아쉽지만 위와 같은 방법으로 체크 해야합니다.

하지만, 카카오톡 앱을 설치하고 로그인 안한 케이스는 매우 희소한 케이스로 정상적인 유저가 아닐 것으로 판단됩니다. 개별 대응 하셔도 무방할듯 하지만,
만약 운영하시는 서비스에 중요한 허들이라 생각하시면 throughTalk 파라메터를 항상 false로 설정하시면 좋을 것 같아요.

앞서 답변받은 방법은 단순 체크라기보다는 android sdk를 사용하여 로그인을 처리하는 것으로 보입니다.
에러가 나면 에러 응답을 받아서 웹에 전달하고 웹에서 다시 throughTalk 변수를 변경해서 로그인처리를 시도하는 것으로 보이고

에러가 안 나면 그냥 로그인되고 token으로 받는 듯 보이네요.

결국엔 이런 케이스까지 처리하려면 Android Native에서 로그인을 처리하는 것으로 보여지는데…

아쉽네요. 답변 감사합니다.