240919~240923 TIL

나고수·2024년 9월 24일
1

2024 TIL

목록 보기
70/94
post-thumbnail

① 배운 것

flutter 안드로이드에서 kakao_flutter_sdk_user를 사용할때 카카오톡 로그인 로직을 빠르게 두번 이상 실행하면 앱이 크래시 나는 버그

  • 현상 : 플레이스토어 ANR 크래시 리포트에 아래와 같은 로그가 찍혀있어서 확인함
Exception java.lang.IllegalStateException: Reply already submitted
  at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply (DartMessenger.java)
  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success (MethodChannel.java)
  at com.kakao.sdk.flutter.KakaoFlutterSdkPlugin.resultOk (KakaoFlutterSdkPlugin.java)
  at com.kakao.sdk.flutter.KakaoFlutterSdkPlugin.access$resultOk (KakaoFlutterSdkPlugin.java)
  at com.kakao.sdk.flutter.KakaoFlutterSdkPlugin$resultReceiver$1.invoke (KakaoFlutterSdkPlugin.java)
  at com.kakao.sdk.flutter.KakaoFlutterSdkPlugin$resultReceiver$1.invoke (KakaoFlutterSdkPlugin.java)
  at com.kakao.sdk.flutter.SingleResultReceiver.onSuccess (SingleResultReceiver.java)
  at com.kakao.sdk.flutter.BaseResultReceiver.receiveOk (BaseResultReceiver.java)
  at com.kakao.sdk.flutter.BaseResultReceiver.onReceiveResult (BaseResultReceiver.java)
  at android.os.ResultReceiver$MyRunnable.run (ResultReceiver.java:50)
  at android.os.Handler.handleCallback (Handler.java:958)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:230)
  at android.os.Looper.loop (Looper.java:319)
  at android.app.ActivityThread.main (ActivityThread.java:8919)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:578)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)
  • 원인 : 깃허브 이슈에서 볼 수 있듯이 메소드 채널이 중복 호출되면서 발생한 이슈임.
  • 해결 : true일때만 카카오톡 로그인 로직이 실행되는 flag를 하나 만들어서 카카오톡 로그인 로직을 실행하면 flag값을 false로 바꾸고 로그인 로직이 완료되면 다시 flag를 true로 바꿔서 다시 로그인 로직을 실행 할 수 있게 함.

ios에서 카카오톡 회원가입 시 카카오톡 앱 -> 서비스 앱으로 돌아온 후 앱에 다시 처음부터 실행되는 이슈

  • 현상 : ios에서 카카오톡 회원가입 시 (카카오톡 앱이 깔려있을때만) 카카오톡 -> 우리 서비스 앱으로 돌아오면서 앱이 카카오톡으로 넘어가기전 화면에 머물러 있는게 아니라 다시 앱의 첫화면부터 다시 시작되었다.

  • 이유 : 정확한 이유는 파악하지 못했다. 비슷한 이슈를 찾을 수 있었지만 여기서 말한 해결책(1. ios 설정에서 뭔가 빠졌다. 2. 제3의 로그인 sdk(페이스북이나 네이버 등)에서 딥링크 충돌이 난다.)으로는 해결이 안되었고 직접적인 원인을 찾기에도 시간이 없는 상황

  • 해결 : 직접적인 원인을 찾기보다는 좀 ux적으로 다른 방법을 택하기로 했다.
    카카오톡-> 우리 서비스 앱으로 돌아온 직후 바로 다른 화면으로 context.go를 시켜주면 앱의 첫 화면부터 다시 시작되는게 아니라 원하는 화면으로 보낼 수 있었음. 그래서 스플래시->로그인화면->카카오톡->우리앱으로 돌아온 후 로그인화면에서 추가 정보를 받는게 아니라 스플래시->로그인화면->카카오톡->우리앱으로 돌아온 후 다음 화면으로 보낸 후 그 화면에서 추가 정보를 받도록 수정함.

② 회고 (restropective)
개발적으로 해결하기 어려운 문제는 ux적으로 해결하는 것이 때로는 좋은 방법이다.

③ 개선을 위한 방법

profile
되고싶다

0개의 댓글