kakao / kakao_flutter_sdk

Flutter SDK for Kakao Open API
Apache License 2.0
192 stars 71 forks source link

[Bug] 카카오계정으로 로그인 웹 화면 중복 노출 및 앱 종료 현상 #173

Closed tazan83 closed 1 year ago

tazan83 commented 1 year ago

이슈 설명 (Issue description)

안녕하세요.

앱 미설치 상태로 카카오 로그인 버튼을 중복 터치할 경우 "카카오계정으로 로그인" 웹 화면이 중복으로 열리며, back 시 앱이 종료되는 현상이 발생되어 수정 가능한지 문의 드립니다. 로그와 테스트 방법 추가 하였으니 확인 부탁드립니다.

앱 ID (App ID)

116465

플랫폼 (Platform)

Android 13

디바이스 (Device)

Samsung Galaxy S21

Version

1.4.2

Flutter SDK

2.10.5

재현 방법 (Steps to reproduce)

  1. 카카오톡 미설치 상태 -> 카카오 로그인 버튼 중복 터치 -> "카카오계정으로 로그인" 화면 중복 노출됨 -> back

코드 샘플 (Code Sample)

No response

Logs

E/AndroidRuntime( 7472): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=50001, result=0, data=Intent { (has extras) }} to activity {com.test.dev/com.test.MainActivity}: java.lang.IllegalStateException: Reply already submitted
E/AndroidRuntime( 7472):    at android.app.ActivityThread.deliverResults(ActivityThread.java:5994)
E/AndroidRuntime( 7472):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:6033)
E/AndroidRuntime( 7472):    at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:67)
E/AndroidRuntime( 7472):    at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
E/AndroidRuntime( 7472):    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/AndroidRuntime( 7472):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
E/AndroidRuntime( 7472):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
E/AndroidRuntime( 7472):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 7472):    at android.os.Looper.loopOnce(Looper.java:226)
E/AndroidRuntime( 7472):    at android.os.Looper.loop(Looper.java:313)
E/AndroidRuntime( 7472):    at android.app.ActivityThread.main(ActivityThread.java:8757)
E/AndroidRuntime( 7472):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 7472):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
E/AndroidRuntime( 7472):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
E/AndroidRuntime( 7472): Caused by: java.lang.IllegalStateException: Reply already submitted
E/AndroidRuntime( 7472):    at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:431)
E/AndroidRuntime( 7472):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:272)
E/AndroidRuntime( 7472):    at com.kakao.sdk.flutter.KakaoFlutterSdkPlugin.onActivityResult(KakaoFlutterSdkPlugin.kt:223)
E/AndroidRuntime( 7472):    at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEngineConnectionRegistry.java:840)
E/AndroidRuntime( 7472):    at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onActivityResult(FlutterEngineConnectionRegistry.java:441)
E/AndroidRuntime( 7472):    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:772)
E/AndroidRuntime( 7472):    at io.flutter.embedding.android.FlutterFragment.onActivityResult(FlutterFragment.java:916)
E/AndroidRuntime( 7472):    at io.flutter.embedding.android.FlutterFragmentActivity.onActivityResult(FlutterFragmentActivity.java:534)
E/AndroidRuntime( 7472):    at android.app.Activity.dispatchActivityResult(Activity.java:8951)
E/AndroidRuntime( 7472):    at android.app.ActivityThread.deliverResults(ActivityThread.java:5987)
E/AndroidRuntime( 7472):    ... 13 more

Flutter Doctor

[✓] Flutter (Channel stable, 2.10.5, on macOS 13.3.1 22E261 darwin-x64, locale ko-KR)
    • Flutter version 2.10.5 at /Users/admin/fvm/versions/2.10.5
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5464c5bac7 (1 year ago), 2022-04-18 09:55:37 -0700
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/admin/Library/Android/sdk
    • Platform android-33, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)

[✓] VS Code (version 1.77.3)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.62.0

[✓] Connected device (2 available)
    • SM G991N (mobile) • R3CR107XZFX • android-arm64  • Android 13 (API 33)
    • Chrome (web)      • chrome      • web-javascript • Google Chrome 112.0.5615.137

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
mbkim95 commented 1 year ago

안녕하세요

제보주신 이슈는 로그인 버튼을 빠르게 중복 클릭했을 때 메소드 채널이 중복 호출되면서 발생한 이슈로 파악됩니다. 플러터에서 아직 해결되지 않은 이슈인 것으로 파악되어 SDK에서 별도의 이슈 처리는 어려울 것 같습니다.

조금 번거로우시더라도 해당 로그인 버튼에 일정 시간 딜레이를 추가하여 중복 호출을 방지할 수 있도록 수정하시는 것이 좋을 것 같아요. (SDK에서 별도로 로그인 버튼을 제공하지 않고 있기 때문에 SDK 코드 내에 중복 호출을 방지하는 로직을 추가하는 것은 좋지 않다고 판단했습니다)

이슈 제보주셔서 감사드립니다.

tazan83 commented 1 year ago

@mbkim95 네 확인 감사합니다. 중복 호출을 방지하는 방향으로 진행하도록 하겠습니다.