카카오 관련 트러블 슈팅

김동연·2025년 6월 4일

개발기록일지(Flutter)

목록 보기
15/32

다음은 Flutter iOS 앱에서 Kakao 로그인 구현 시 발생할 수 있는 트러블슈팅 항목들과 각각의 해결 방법을 정리한 내용.


Kakao 로그인 트러블슈팅 (iOS 중심)

1. 자동 로그인이 되지 않음 (앱 재시작 시 매번 로그인 필요)

현상

  • AuthApi.instance.hasToken()은 true인데도 UserApi.instance.me() 호출 시 매번 인증 화면이 뜨거나 에러

원인

  • hasToken()은 단순히 로컬에 토큰이 존재함을 의미할 뿐, 유효성은 검증하지 않음
  • 토큰이 만료되었거나 최초 권한 동의가 필요할 경우 자동 로그인 실패

해결

void tryAutoLogin() async {
  if (await AuthApi.instance.hasToken()) {
    try {
      final user = await UserApi.instance.me();
      // 자동 로그인 성공
    } catch (e) {
      // 자동 로그인 실패 → 수동 로그인 유도
      await UserApi.instance.loginWithKakaoAccount();
    }
  }
}
  • 위와 같이 me() 호출을 통해 토큰 유효성 확인 → 실패 시 로그인 시도

2. iOS에서 카카오 로그인 시 ‘kakao.com을 사용하여 로그인하려고 합니다’ 경고창 발생

현상

  • 카카오 로그인 시 아래와 같은 iOS 기본 팝업이 표시됨:

    ‘앱이 kakao.com을 사용하여 로그인하려고 합니다’

원인

  • Kakao SDK는 내부적으로 OAuth2 인증을 위해 Safari 또는 웹뷰를 사용하며, 외부 도메인(kakao.com)에 접근
  • iOS 보안 정책상 외부 웹 인증 시 사용자의 동의 팝업이 강제로 뜸 (제어 불가능)

해결

  • 이는 정상 동작이며 제거 불가
  • 사용자에게 팝업이 뜨는 이유를 UX적으로 안내하거나 한 번만 뜨도록 처리하는 정도만 가능

3. 사용자 정보가 Firestore에 저장되지 않음

현상

  • 로그인은 되지만 Firestore의 users 컬렉션에 해당 유저 정보가 없음

원인

  • 카카오 로그인은 Firebase Auth를 거치지 않기 때문에 자동으로 사용자 정보를 저장하지 않음
  • 사용자가 동의하지 않은 항목은 null로 반환되어 저장되지 않거나 누락됨

해결

  • 동의 항목 설정 확인: Kakao Developers > 내 애플리케이션 > 동의 항목

    • 프로필, 이메일, 카카오 계정 ID사용자 동의 필요
  • null-safe 처리 후 Firestore에 직접 저장:

final nickname = kakaoAccount?.profile?.nickname ?? 'NoName';
final email = kakaoAccount?.email ?? 'unknown@email.com';
// ...
await _firestore.collection('users').doc(userId).set(userModel.toJson(), SetOptions(merge: true));

0개의 댓글