[카카오 로그인 sdk] 기기별 NotSupported/Cancelled 반환 관련

■ SDK 버전

  • v2-user / v2-auth 2.23.2

■ 사용 API

  • UserApiClient.instance.loginWithKakao(context, callback) (통합 로그인, 간편로그인 바텀시트 노출)
  • 바텀시트에서 “카카오계정 직접 입력” 선택 시 발생

■ 증상 요약
동일한 “사용 가능한 브라우저 없음” 상황인데, 기기 환경에 따라 ClientError의 reason이 다르게 내려옵니다.

환경 A — 카카오톡 로그인됨, 기본 브라우저 없음, Chrome 사용중지(disable)│ClientError(reason=Cancelled)

환경 B — 카카오톡 설치(미로그인), 브라우저 자체가 없음│ClientError(reason=NotSupported)

■ 재현 절차 (환경 A)

  1. 기기에서 기본 브라우저 없음 + Chrome을 “사용 중지” 상태로 설정
  2. 카카오톡은 로그인된 상태로 설치
  3. 앱에서 loginWithKakao 호출 → 간편로그인 바텀시트 표시
  4. “카카오계정 직접 입력” 선택
  5. 화면(바텀시트)만 닫히고, 콜백으로 ClientError(Cancelled) 전달됨

■ 기대 동작
브라우저(CustomTab)를 띄울 수 없는 환경이므로, 사용자가 취소한 것이 아니라 "진입 불가"에 해당하는 오류(예: NotSupported) 로 일관되게 통보되기를 기대합니다.

■ 실제 동작 / 문제점

  • 환경 A에서는 사용자가 아무 취소 동작을 하지 않았는데도 Cancelled가 반환됩니다.
  • 앱 입장에서 Cancelled는 “카카오톡 동의화면에서 사용자가 실제로 취소한 경우” 와 완전히 동일한 값·메시지라서, 이 둘을 구분할 수 없습니다. 그 결과 "브라우저가 없어 진입 실패한 케이스"를 웹 로그인 등으로 폴백 처리할 수 없습니다.

안녕하세요.

확인을 위해 앱 ID 부탁드립니다.


앱ID
https://developers.kakao.com/ 의 전체 앱 목록에 표시되는 ID 값 입니다.
숫자로된 ID 입니다
ex) 123456

[@tim.l @woody.ho]

앱 ID : 334117 입니다.

NotSupported: 지원하지 않는 기능
Cancelled: 사용자가 취소한 경우

안녕하세요.

카카오톡으로 전환 이후,
기본 브라우저가 설치되어 있지 않아 취소되는 경우를 NotSupported 오류로 처리하기를 원하시는 것으로 이해했습니다.

다만, NotSupported는 기능 지원 여부를 나타내는 오류 코드로 카카오톡 진입 이후 발생할 수 있는 기본 브라우저 미설치와 같은 엣지 케이스만을 구분하여 처리하기 위한 용도로는 고려되지 않았습니다.

아쉽지만, 이러한 엣지 케이스에 대해 정확히 구분이 필요하신 경우라면,
해당 단계에서 웹로그인으로 폴백 처리 가능여부 확인을 위해서라도 기본 브라우저 실행 가능여부를 직접 확인 하신 후 처리 부탁드립니다.

답변 감사합니다. 두 가지 확인/문의드립니다.

  1. 사전 처리의 구조적 한계

현재 사용자에게 카카오톡 앱투앱과 다른 카카오계정 로그인 두 선택지를 함께 제공하기 위해 loginWithKakao(간편로그인 바텀시트)를 사용 중입니다.

안내주신 “기본 브라우저 실행 가능 여부를 직접 확인 후 폴백” 을 적용하려 했으나, loginWithKakao 호출 시점에는 사용자가 바텀시트에서 앱투앱을 고를지, 계정 로그인(브라우저 필요)을 고를지 알 수 없습니다.

  • 브라우저 없다고 미리 폴백하면 → 카카오톡으로 로그인 가능한 사용자까지 웹뷰로 보내게 됨
  • 바텀시트 노출 후에는 → 계정 선택 시 이미 진입 상태라 사전 처리 불가

즉 통합 바텀시트를 유지하는 한 브라우저 사전 체크가 성립하지 않는데, 이 경우 권장하는 처리 방식이 있을까요?

  1. 제3자 앱에서 로그인 페이지가 열리는 현상

테스트 중, 기본 브라우저가 없는 단말에서 계정 로그인 선택 시 인가 URL이 제3자 앱(예: 숨고)의 인앱 WebView로 전달되어 그 앱에서 카카오 로그인 페이지가 렌더링되는 것을 확인했습니다.

(해당 앱이 host 없는 https intent-filter를 선언해 OS 기본 웹 핸들러로 선택되는 것으로 추정)

이게 의도된 흐름이 맞는지, 신뢰 가능한 브라우저가 없을 때의 처리 가이드가 있는지 확인 부탁드립니다.

안녕하세요.

앞서 안내 드린바와 같이 NotSupported는 기본 브라우저 유무만을 구분하는 용도로 설계된 오류가 아니기 때문에, 이를 말씀하신 바와 같은 특정 케이스만을 위한 용도로 사용될 수 없습니다.

따라서, 카카오톡으로 로그인과, 카카오 계정 직접 입력간 발생되는 NotSupported의 구분은 서비스가 직접 처리하셔야 합니다.

1. NotSupported 구분 방법

ClientError는 msg 필드로 상세 사유를 전달하고 있습니다.
카카오 계정 직접 입력 → 브라우저 미설치에 대한 취소 동선은 msg에 포함된 browser 텍스트로 구분할 수 있는점 참고 부탁드립니다.

취소 경로 Error
“카카오톡으로 로그인” - 로그인 안됨 AuthError(reason=AccessDenied, statusCpde=302 …)
“카카오톡으로 로그인” - 톡 미설치 ClientError(reason=NotSupported, msg=KakaoTalk not installed)
“카카오 계정 직접 입력” - 브라우저 미설치 ClientError(reason=NotSupported, msg=No browser has been installed on a device.)
2. 기본 브라우저가 없는 상황에서 웹뷰 처리

숨고 같은 웹뷰 기반 앱은 브라우저 설치 여부와 무관히 이를 자체적으로 제어합니다.
이러한 서비스는 JS SDK를 사용하며, 웹뷰에서 카카오톡 커스텀 스킴 호출을 감지하여 톡을 실행하고, 실행 불가할 시 계정 로그인으로 이동 시키도록 자체적으로 구현되어 있습니다.

웹뷰 기반이 아닌 회원님 앱이 이와 유사한 구성을 하고자 하신다면
브라우저 미설치 상황에서 카카오톡 실행 가능 상태를 확인 하신 뒤 직접 웹뷰를 열고 REST API방식으로 이를 처리할 수 있습니다. 다만, 이와 같은 구현은 복잡하고 희귀한 상황이라 실제로 이러한 사례 대응을 위해 개발이 필요할 지는 판단해 보시면 좋을것 같습니다. (일반적으로 이 경우 브라우저나 톡 설치를 안내 합니다.)