카카오 로그인 구현하는데, "Lost connection to device." 오류가 뜹니다


developers ID = 1123048
SDK version = ^1.9.5


카카오 로그인 구현 중, 웹사이트으로 카카오 로그인 과정에서 아래와 같은 오류가 발생하며, 디바이스(애뮬레이터)와의 연결이 끊어집니다. 그리고 물론 로그인조차 되지 않습니다.

  • login_opening_screen.dart 속 카카오 로그인 구현 로직
@override
void initState() {
  super.initState();

  KakaoSdk.init(nativeAppKey: '3cbc4103340e6be3c6247d5228d55534'); // 네이티브 앱 키 설정

  _timer = Timer.periodic(Duration(seconds: 3), (Timer timer) {
    setState(() {
      _currentImageIndex = (_currentImageIndex + 1) % _backgroundImages.length;
    });
  });

  _checkLoginStatus(); // 앱 시작 시 로그인 상태 확인
}

void signInWithKakao() async {
  setState(() {
    _isLoadingKakao = true; // 로딩 시작
  });

  try {
    // 카카오톡이 설치되어 있는지 확인 후, 카카오톡으로 로그인 시도
    if (await kko.isKakaoTalkInstalled()) {
      try {
        await kko.UserApi.instance.loginWithKakaoTalk();
        final prefs = await SharedPreferences.getInstance();
        await prefs.setBool('isLoggedIn', true); // 로그인 상태 저장
        await prefs.setString('loginMethod', 'kakao'); // 로그인 방법 저장
        print('카카오톡으로 로그인 성공');
      } catch (error) {
        print('카카오톡으로 로그인 실패 $error');
        // 카카오톡 로그인 실패 시, 카카오 계정으로 로그인 시도
        await kko.UserApi.instance.loginWithKakaoAccount();
        final prefs = await SharedPreferences.getInstance();
        await prefs.setBool('isLoggedIn', true); // 로그인 상태 저장
        await prefs.setString('loginMethod', 'kakao'); // 로그인 방법 저장
        print('카카오 계정으로 로그인 성공');
      }
    } else {
      // 카카오톡이 설치되어 있지 않은 경우, 카카오 계정으로 로그인 시도
      await kko.UserApi.instance.loginWithKakaoAccount();
      final prefs = await SharedPreferences.getInstance();
      await prefs.setBool('isLoggedIn', true); // 로그인 상태 저장
      await prefs.setString('loginMethod', 'kakao'); // 로그인 방법 저장
      print('카카오 계정으로 로그인 성공');
    }

    // 로그인 후 사용자 정보 가져오기
    kko.User? kakaoUser = await kko.UserApi.instance.me();
    String? email = kakaoUser.kakaoAccount?.email ?? '';
    String? birthday = kakaoUser.kakaoAccount?.birthday;
    String formattedBirthday = birthday != null && birthday.length == 4
        ? "${birthday.substring(0, 2)}-${birthday.substring(2, 4)}"
        : '';

    String? phoneNumber = kakaoUser.kakaoAccount?.phoneNumber;
    String formattedNumber = phoneNumber != null && phoneNumber.length >= 4
        ? '0' + phoneNumber.substring(4, 16)
        : '';

    print(kakaoUser.kakaoAccount);

    // 유저 정보를 바탕으로 User 객체를 생성
    u.User user = u.User(
      u_email: email,
      u_name: kakaoUser.kakaoAccount?.name ?? '',
      u_img_url: kakaoUser.kakaoAccount?.profile?.profileImageUrl ?? '',
      u_nick: kakaoUser.kakaoAccount?.profile?.nickname ?? '',
      u_birth: "${kakaoUser.kakaoAccount?.birthyear ?? ''}-${formattedBirthday}",
      u_p_number: formattedNumber,
      u_address: '',
      trip_preference: 3,
      business_license: '',
      login_provider: 'kakao',
      // 기타 필드들 초기화
    );


    // UserModel 프로바이더를 사용하여 데이터베이스에 유저가 존재하는지 확인
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    bool userExists = await userModel.checkUserExists(email: email);

    if (userExists) {
      // 유저가 이미 존재하면 로그인 함수 호출
      await userModel.kakaoLoginUser(user: user);
    } else {
      // 유저가 존재하지 않으면 등록 함수 호출
      await userModel.kakaoRegisterUser(user);
    }

    // 로그인 성공 시, 팝업 닫기 및 메인 페이지로 이동
    // Navigator.of(context).pop();  // 팝업 닫기
    Navigator.of(context).pushReplacement(
      MaterialPageRoute(builder: (context) => RootScreen()),
    );

  } catch (error) {
    print('카카오 로그인 실패 $error');
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('카카오 로그인에 실패했습니다.'),
      ),
    );
  } finally {
    setState(() {
      _isLoadingKakao = false; // 로딩 종료
    });
  }
}

  • AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:label="마이부산로그"
        android:name="${applicationName}"
        android:icon="@mipmap/appicon"
        android:usesCleartextTraffic="true">

        <activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true">
            <intent-filter android:label="flutter_web_auth">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="kakao3cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" android:host="oauth"/>
            </intent-filter>
        </activity>

    </application>

</manifest>

  • SDK 초기화
void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  KakaoSdk.init(
    nativeAppKey: '3cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    // javaScriptAppKey: 'e0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  );

  runApp(MyApp());
}

안녕하세요

제보주신 에러 메시지를 보았을 때는 SDK 이슈가 아닌 개발 환경 상의 이슈로 보이는데요, 혹시 이슈 발생 중인 다른 디바이스에서도 동일하게 에러가 발생하나요?

네. 애뮬레이터 환경과 실제 디바이스에서도 똑같은 오류가 발생하여, 연결끊김과 로그인 오류가 발생합니다.

아 제가 위에 질문을 잘못 적었네요ㅠㅠ 이슈 발생하고 있는 디바이스 외에 다른 디바이스에서도 동일하게 이슈가 발생하는지 여부가 궁금했습니다. (에뮬레이터 x)

현재 서버 로그를 확인했을 때는 실제 디바이스로는 'SM-A600N’로만 확인한 것으로 파악되어서 질문드려요

답변이 늦어서 죄송합니다. 다른 디바이스로 테스트 해본 결과, 똑같이 “Lost connection to device.” 결과가 뜨고 android studio와의 연결이 끊깁니다.

처음 제보들어온 이슈이고, 짐작가는 부분이 없어서 원인 파악이 어렵네요…

혹시 새로운 프로젝트 만들어서 kakao_flutter_sdk만 추가한 상태에서 로그인 시도할 때도 이슈가 재현되는지 확인이 가능할까요?

추가로 이슈 재현 영상과 “Lost connection to device.” 를 포함한 로그도 첨부해주시면 감사하겠습니다

다른 작업을 하느라 늦게 답변을 드린 점 대단히 죄송합니다.

기존에 쓰던 패키지(kakao_flutter_sdk_user)에서 변경된 패키지(kakao_flutter_sdk)만 사용해본 결과, 이전과 똑같은 오류가 발생된다는 점을 확인하였습니다.

D/CustomTabsCommonClient(15097): Choosing com.android.chrome as custom tabs browser
D/EGL_emulation(15097): app_time_stats: avg=235.54ms min=92.23ms max=952.49ms count=8
E/SurfaceSyncGroup(15097): Failed to receive transaction ready in 1000ms. Marking SurfaceSyncGroup(wmsSync-VRI[AuthCodeCustomTabsActivity]#4) as ready
I/HWUI    (15097): Davey! duration=1021ms; Flags=1, FrameTimelineVsyncId=1295731, IntendedVsync=39861809284230, Vsync=39861809284230, InputEventId=0, HandleInputStart=39861819071900, AnimationStart=39861819125400, PerformTraversalsStart=39861819203200, DrawStart=39862739299300, FrameDeadline=39861825950896, FrameInterval=39861819016800, FrameStartTime=16666666, SyncQueued=39862745485700, SyncStart=39862762424600, IssueDrawCommandsStart=39862762502800, SwapBuffers=39862765868200, FrameCompleted=39862847761800, DequeueBufferDuration=225800, QueueBufferDuration=433400, GpuCompleted=39862846769200, SwapBuffersCompleted=39862847761800, DisplayPresentTime=55044300865536, CommandSubmissionCompleted=39862765868200, 
D/EGL_emulation(15097): app_time_stats: avg=198.12ms min=128.36ms max=276.61ms count=6
D/EGL_emulation(15097): app_time_stats: avg=189.42ms min=125.56ms max=282.83ms count=6
D/EGL_emulation(15097): app_time_stats: avg=158.42ms min=114.70ms max=206.66ms count=7
D/EGL_emulation(15097): app_time_stats: avg=146.43ms min=108.61ms max=191.58ms count=7
D/EGL_emulation(15097): app_time_stats: avg=210.06ms min=113.66ms max=339.49ms count=5
D/VRI[AuthCodeCustomTabsActivity](15097): visibilityChanged oldVisibility=true newVisibility=false
D/VRI[MainActivity](15097): visibilityChanged oldVisibility=true newVisibility=false
F/crash_dump64(15203): crash_dump.cpp:627] failed to attach to thread 174: Permission denied
F/crash_dump64(15206): crash_dump.cpp:627] failed to attach to thread 185: Permission denied
E/TransactionExecutor(15097): Failed to execute the transaction: tId:-72491387 ClientTransaction{
E/TransactionExecutor(15097): tId:-72491387   transactionItems=[
E/TransactionExecutor(15097): tId:-72491387     LaunchActivityItem{activityToken=android.os.BinderProxy@801f276,intent=Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=kakao3cbc4103340e6be3c6247d5228d55534://oauth/... flg=0x14000000 cmp=com.ds.busan_trip/com.kakao.sdk.flutter.AuthCodeHandlerActivity (has extras) },ident=121029543,info=ActivityInfo{888d13 com.kakao.sdk.flutter.AuthCodeHandlerActivity},curConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h826dp 560dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 3120) mAppBounds=Rect(0, 144 - 1440, 3036) mMaxBounds=Rect(0, 0 - 1440, 3120) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} as.4 s.153 fontWeightAdjustment=0},overrideConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h826dp 560dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 3120) mAppBounds=Rect(0, 144 - 1440, 3036) mMaxBounds=Rect(0, 0 - 1440, 3120) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} as.4 s.2 fontWeightAdjustment=0},deviceId=0,referrer=com.android.chrome,procState=15,state=null,persistentState=null,pendingResults=null,pendingNewIntents=null,sceneTransitionInfo=null,profilerInfo=null,assistToken=android.os.BinderProxy@32f84e4,shareableActivityToken=android.os.BinderProxy@2113d4d,activityWindowInfo=ActivityWindowInfo{isEmbedded=false, taskBounds=Rect(0, 0 - 1440, 3120), taskFragmentBounds=Rect(0, 0 - 1440, 3120)}}
E/TransactionExecutor(15097): tId:-72491387     ResumeActivityItem{mActivityToken=android.os.BinderProxy@801f276,procState=-1,updateProcState=false,isForward=true,shouldSendCompatFakeFocus=false}
E/TransactionExecutor(15097): tId:-72491387     Target activity: Not found for token: android.os.BinderProxy@801f276
E/TransactionExecutor(15097): tId:-72491387   ]
E/TransactionExecutor(15097): tId:-72491387 }
D/AndroidRuntime(15097): Shutting down VM
E/AndroidRuntime(15097): FATAL EXCEPTION: main
E/AndroidRuntime(15097): Process: com.ds.busan_trip, PID: 15097
E/AndroidRuntime(15097): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ds.busan_trip/com.kakao.sdk.flutter.AuthCodeHandlerActivity}: java.lang.ClassNotFoundException: Didn't find class "com.kakao.sdk.flutter.AuthCodeHandlerActivity" on path: DexPathList[[zip file "/data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/lib/x86_64, /data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(15097): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3954)
E/AndroidRuntime(15097): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4235)
E/AndroidRuntime(15097): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112)
E/AndroidRuntime(15097): 	at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174)
E/AndroidRuntime(15097): 	at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109)
E/AndroidRuntime(15097): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81)
E/AndroidRuntime(15097): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2636)
E/AndroidRuntime(15097): 	at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(15097): 	at android.os.Looper.loopOnce(Looper.java:232)
E/AndroidRuntime(15097): 	at android.os.Looper.loop(Looper.java:317)
E/AndroidRuntime(15097): 	at android.app.ActivityThread.main(ActivityThread.java:8705)
E/AndroidRuntime(15097): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(15097): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
E/AndroidRuntime(15097): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
E/AndroidRuntime(15097): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.kakao.sdk.flutter.AuthCodeHandlerActivity" on path: DexPathList[[zip file "/data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/lib/x86_64, /data/app/~~cmdw3wmneanpu4EOzXIzfA==/com.ds.busan_trip-_Jd5JNOLekGpmf-QHo04bQ==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(15097): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E/AndroidRuntime(15097): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
E/AndroidRuntime(15097): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime(15097): 	at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
E/AndroidRuntime(15097): 	at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44)
E/AndroidRuntime(15097): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1448)
E/AndroidRuntime(15097): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3941)
E/AndroidRuntime(15097): 	... 13 more
I/Process (15097): Sending signal. PID: 15097 SIG: 9
Lost connection to device.

첨부해주신 로그와 AndroidManifest.xml 파일을 확인해보니 com.kakao.sdk.auth.AuthCodeHandlerActivity 를 등록하셔서 에러가 발생하는 것 같아요, 가이드 확인하셔서 com.kakao.sdk.flutter.AuthCodeCustomTabsActivity 등록 후 확인 부탁드리겠습니다.

드디어 로그인이 오류없이 잘 실행됩니다 !!!항상 제가 뒤늦게 답변드렸음에도 불구하고 끝까지 도움 주셔서 정말 감사합니다 !!

1개의 좋아요

해결되어서 다행입니다ㅎㅎㅎ

1개의 좋아요