카카오 연동 로그인 무반응

문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.

앱 ID : 1231434
SDK 버전 : kakao_flutter_sdk: 1.9.7+3
플랫폼 : Android / IOS


카카오 로그인을 하기위한 페이지

어플에서 카카오 로그인 시도 화면입니다

카카오 로그인 시도 → 동의 화면 → 2단계 인증(네, 로그인 할래요.) → 앱으로 돌아옴 → 무반응

확인한 바로는

  1. 구글 플레이, 앱스토어에 올라간 앱들이 반응이 없는걸로 나타납니다
  2. 카카오 2단계 인증이 걸려있는 계정에서 나타나는걸로 예상됩니다.

2단계 인증이 없는 계정은 정상작동하는 것으로 확인되고 있으며 2단계 인증 관련한 프로세스나 리턴값을 확인하고 싶습니다.

Future kakaoLogin() async {
try {
bool isInstalled = await isKakaoTalkInstalled();

  OAuthToken token;

  appLog('[카카오 로그인 시작]');
  appLog(' 카카오톡 설치 여부: $isInstalled');

  if (isInstalled) {
    try {
      token = await UserApi.instance.loginWithKakaoTalk();
      appLog('[1][카카오톡 로그인 성공]');

    } catch (e, s) {
      // 카카오톡으로 로그인 실패 → 카카오 계정으로 재시도
      appLog(' 카카오톡 로그인 실패: $e');
      appLog(' StackTrace: $s');
      appLog(' 웹뷰 로그인으로 대체 시도');
      token = await UserApi.instance.loginWithKakaoAccount();
      appLog('[✅ 웹뷰 로그인 성공. 액세스 토큰: ${token.accessToken}]');
    }
  } else {
    // 앱이 없으면 계정 로그인
    appLog('[⚠️ 카카오톡 미설치. 웹뷰 로그인 진행]');
    token = await UserApi.instance.loginWithKakaoAccount();
    appLog('[✅ 웹뷰 로그인 성공. 액세스 토큰: ${token.accessToken}]');
  }

  // 사용자 정보 가져오기
  final user = await UserApi.instance.me();
  appLog('[2]로그인 성공! 응답 내용:');
  appLog('토큰: ${token.accessToken}');
  appLog('사용자 ID: ${user.id}');
  appLog('이메일: ${user.kakaoAccount?.email}');
  appLog('이름: ${user.kakaoAccount?.name}');
  appLog('닉네임: ${user.kakaoAccount?.profile?.nickname}');

  String? email = user.kakaoAccount?.email ?? '';
  String? nickname = user.kakaoAccount?.profile?.nickname;
  String? name = user.kakaoAccount?.name;
  String esntlId = user.id.toString();

  if (email.isEmpty) {
    appLog('카카오 계정에 이메일이 등록되지 않아 로그인(회원가입)할 수 없어 리턴 !!!!!');
    DialogUtil.showInfoDialog(context, '카카오 계정에 이메일이 등록되지 않아 로그인(회원가입)할 수 없습니다.');
    return;
  }

  await context.read<loginStore>().snsLoginUser(
    context,
    email,
    esntlId,
    nickname,
    'kakao',
  );
} catch (e, s) {
  await UserApi.instance.unlink(); // 회원가입을 하지않고 취소하면 연결을 끊음

  if (e is PlatformException) {
    appLog('❌ PlatformException 발생');
    appLog('🔹 code: ${e.code}');
    appLog('🔹 message: ${e.message}');
    appLog('🔹 details: ${e.details}');
  } else {
    appLog('❌ 예외 발생: ${e.runtimeType} - $e');
  }

  appLog('[catchError] StackTrace:\n$s');
  DialogUtil.showInfoDialog(context, '죄송합니다. 예상치못한 에러로 카카오 로그인에 실패하였습니다.');
}

}
코드는 이렇게 작성하여 사용중입니다.

안녕하세요

서버 로그 확인해봤는데 키해시 값이 등록되지 않아서 에러가 발생하고 있습니다.

스토어에 앱 출시 시 키해시 값이 달라지기 때문에 Android 키해시 문제 종합 안내 참고해서 키해시 값 등록 부탁드리겠습니다.

1개의 좋아요

키 해시 확인해보았는데 릴리즈 키 해시는 등록된 것으로 보입니다

현재 제가 확인해본바로는 2단계인증이 안걸린 계정에서는 구글, 앱 스토어에서 정상동작을 하고있는데 키 해시가 문제인걸까요?

구체적으론 이 앱에 첫 환경으로 들어와서 2단계 인증이 필요한 계정에서 무반응 증상이 나타납니다

서버 로그 및 직접 테스트해본 결과 2단계 인증과 무관하게 에러가 발생하고 있고, 모두 키해시가 등록되지 않아서 에러가 발생한 것으로 확인됩니다.

플레이스토어에서 설치한 앱으로 로그인 시 키해시 값은 RbyK********************1kg= 이고, 1231434 앱에 해당 키해시 값은 등록되지 않은 것도 확인했습니다.

참고 부탁드리겠습니다.

도음을 주셔서 감사합니다.

RbyK********************1kg= 키 해시를 키해시 문제 종합 안내 링크를 따라 open SSL로 구할 수 있었습니다.

마지막으로 궁금한건
기존에 디버그, 릴리즈를
final keyHash = await KakaoSdk.origin;
으로 로깅하여 등록해서 현재 에러를 만나기전까진 정상동작을 확인하였었는데요

openSSL로 base64로 인코딩한 키 해시랑
final keyHash = await KakaoSdk.origin; 로 구한 릴리즈 키 해시의 차이점이 궁금합니다.

2단계 인증없이 사용하는 계정은 KakaoSdk.origin 에서 구한 키 해시를 바라보고
2단계 인증이 있는 계정은 구글 플레이 콘솔 인증서에 등록된 키 해시를 바라보고있다고 이해하면 될까요??

안드로이드 앱은 빌드가 될 때 서명키로 서명이 진행되는데요, 프로젝트에서 별도로 설정한 것이 없다면 디버그 환경에서는 디버그 서명키, 릴리즈 환경에서는 개발자가 생성한 릴리즈 서명키로 서명이 진행됩니다. 그런데 구글 플레이스토어에 앱을 배포하는 경우에는 구글 플레이에서 생성한 서명키를 통해 서명되기 때문에 키 해시 값이 달라지게 됩니다.

구글 플레이 서명키에 대한 키 해시 값이 등록되어있지 않았던 것을 보면 final keyHash = await KakaoSdk.origin;를 통해서 구한 릴리즈 키 해시 값은 개발자가 생성한 릴리즈 서명키의 키 해시 값인 것으로 보여요.

그리고 카카오계정에 2차 인증이 설정 유무에 로그인 성공 여부가 달라진다고 말씀주셨는데요, 플레이스토어에 업로드된 앱은 동일한 서명 키로 서명된 후 플레이스토어에 공개되기 때문에 카카오계정 2단계 인증을 설정했다고 해서 서명 키가 바뀔 수 없습니다.