Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

안드로이드 / 결제사 앱 실행 오류 #24

Closed
ijunc2 opened this issue May 9, 2021 · 26 comments
Closed

안드로이드 / 결제사 앱 실행 오류 #24

ijunc2 opened this issue May 9, 2021 · 26 comments
Labels
bug Something isn't working good first issue Good for newcomers

Comments

@ijunc2
Copy link

ijunc2 commented May 9, 2021

이니시스에서 삼성카드 앱 을 호출하면 동작을 하지 않습니다. 삼성카드뿐만 아니라 다른 PG사 모두 호출이 되지 않아요. (iOS는 정상동작)

  • AndroidManifest.xml / <application android:usesCleartextTraffic="true" 추가
  • iamport_flutter: ^0.9.14
/Users/ijunc2/flutter/bin/flutter doctor --verbose
[✓] Flutter (Channel stable, 1.22.6, on macOS 11.3.1 20E241 darwin-x64, locale en-KR)
    • Flutter version 1.22.6 at /Users/ijunc2/flutter
    • Framework revision 9b2d32b605 (4 months ago), 2021-01-22 14:36:39 -0800
    • Engine revision 2f0af37152
    • Dart version 2.10.5

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /Users/ijunc2/Library/Android/sdk
    • Platform android-30, build-tools 29.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses

[✓] Xcode - develop for iOS and macOS (Xcode 12.5)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5, Build version 12E262
    • CocoaPods version 1.10.1

[!] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Ultimate Edition (version 2019.3.2)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 38.2.4
    • Dart plugin version 192.7761

[!] Connected device
    ! No devices available

! Doctor found issues in 3 categories.
Process finished with exit code 0

KakaoTalk_Photo_2021-05-09-15-02-25

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

지금 보면 시뮬레이터(에뮬레이터)에서 테스트를 하고 계신 것 같은데
시뮬레이터에서는 외부 앱(카드사 / 간편결제 앱)으로 이동해 결제 테스트 하는 것이 제한됩니다.
이동이 된다고 하더라도 시뮬레이터에는 공동 인증서(구 공인인증서) 설정이 안되니 (일반 결제가 아니고서야) 인증 자체가 안됩니다.
실 디바이스를 연결해 다시 테스트 해보시길 바랍니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 9, 2021

실 디바이스에서 캡쳐한거고 구글플레이에서 받아서 처리한거에요

@SoleeChoi
Copy link
Contributor

SoleeChoi commented May 9, 2021

안녕하세요 아임포트 기술지원팀입니다.

아, 그러시군요! 보내주신 첫번째 이미지에 아래와 같이 No devices available로 나오고
두번째 디바이스 캡쳐 이미지가 시뮬레이터의 이미지와 같아서 시뮬레이터라고 생각했습니다.

[!] Connected device
    ! No devices available

같은 버전(v0.9.14)으로 iamport_flutter가 내장하고 있는 example 앱으로 실 디바이스에서 테스트 해봤을때는 정상적으로 이동되는데

  • 혹시 안드로이드 스튜디오에서 찍히는 로그는 없으신가요?
  • 테스트하고 계신 실 디바이스의 종류와 안드로이드 버전 안내 부탁드립니다.
  • 구글 플레이(스토어)에서 받으셨다는 것은 어떤 것을 받으셨다는 말씀이실까요?

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021 via email

@SoleeChoi
Copy link
Contributor

SoleeChoi commented May 10, 2021

안녕하세요 아임포트 기술지원팀입니다.

안드로이드를 위해 따로 설정해야할 것은 없습니다.
원래 되셨는데 갑자기 안되신다는 말씀인데...테스트 하고 계신 실 디바이스의 종류와 안드로이드 버전 안내 부탁드립니다.

안드로이드 스튜디오에서 로그가 안 찍히시면 네이티브단 오류가 아니라는거고
그렇다면 웹뷰에서 스크립트 에러가 나고 있는건데 사실 고객님이나 저나 모두 같은 PG 결제창인데 저는 원활히 이동되고 있어서
네이티브단 오류일것이라 생각하고 있습니다.
애초에 외부 앱으로 이동하는 로직 자체가 안드로이드의 경우에는 전적으로 네이티브 코드이기도 하구요.

정확한 확인을 위해서는

  1. 웹뷰 디버깅이 허용되어있는 상태로 빌드 된 앱을 직접 PC에 연결해 chrome://inspect로 스크립트 에러가 나는지 확인
    또는
  2. 프로젝트를 안드로이드 스튜디오에서 연결해 직접 브레이크 포인트를 걸어 네이티브단 에러를 디버깅을 해보는 방법인데

1번은 아무래도 쉽지 않을 것 같고 그나마 2번이 수월할 것 같습니다.
2번을 진행하려면 저희에게 프로젝트 소스 전체를 아임포트 서포트 메일(support@iamport.kr)로 보내주셔야 하고
아무래도 소스 공개가 꺼려지신다면 직접 디버깅을 해주셔야 합니다...저희로서는 재현이 안되어서 정확한 원인을 파악할 수 없습니다.

디바이스를 PC에 연결한 채로 iamport_flutter/java/kr.iamport.iamport_flutter/IamportFlutterPlugin.java 파일의 아래 2개 지점에 브레이크 포인트를 찍으신 채로 디버그 모드로 앱을 실행해보시면
image

외부 앱으로 이동하려고 할때 앱이 설치되어 있는 경우 63번째 줄이 트리거되고 앱이 설치되어 있지 않은 경우 72번째 줄이 트리거됩니다.
여기서 문제가 발생하면 아래 Logcat 탭에 빨간 색으로 에러 로그가 찍힐텐데 혹시 찍히시는게 있으시면 공유 부탁드립니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

아래와 같은 오류가 발생하는군요 !

D/ViewRootImpl@c69a412[MainActivity](20728): ViewPostImeInputStage processPointer 0
D/ViewRootImpl@c69a412[MainActivity](20728): ViewPostImeInputStage processPointer 1
D/InputMethodManager(20728): HSI from window - flag : 0 Pid : 20728
E/MethodChannel#iamport_flutter(20728): Failed to handle method call
E/MethodChannel#iamport_flutter(20728): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.startActivity(android.content.Intent)' on a null object reference
E/MethodChannel#iamport_flutter(20728): 	at kr.iamport.iamport_flutter.IamportFlutterPlugin.startNewActivity(IamportFlutterPlugin.java:93)
E/MethodChannel#iamport_flutter(20728): 	at kr.iamport.iamport_flutter.IamportFlutterPlugin.onMethodCall(IamportFlutterPlugin.java:63)
E/MethodChannel#iamport_flutter(20728): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#iamport_flutter(20728): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#iamport_flutter(20728): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#iamport_flutter(20728): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#iamport_flutter(20728): 	at android.os.MessageQueue.next(MessageQueue.java:323)
E/MethodChannel#iamport_flutter(20728): 	at android.os.Looper.loop(Looper.java:136)
E/MethodChannel#iamport_flutter(20728): 	at android.app.ActivityThread.main(ActivityThread.java:6682)
E/MethodChannel#iamport_flutter(20728): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#iamport_flutter(20728): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
E/MethodChannel#iamport_flutter(20728): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
E/flutter (20728): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.app.Activity.startActivity(android.content.Intent)' on a null object reference, null, java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.startActivity(android.content.Intent)' on a null object reference
E/flutter (20728): 	at kr.iamport.iamport_flutter.IamportFlutterPlugin.startNewActivity(IamportFlutterPlugin.java:93)
E/flutter (20728): 	at kr.iamport.iamport_flutter.IamportFlutterPlugin.onMethodCall(IamportFlutterPlugin.java:63)
E/flutter (20728): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (20728): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (20728): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (20728): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (20728): 	at android.os.MessageQueue.next(MessageQueue.java:323)
E/flutter (20728): 	at android.os.Looper.loop(Looper.java:136)
E/flutter (20728): 	at android.app.ActivityThread.main(ActivityThread.java:6682)
E/flutter (20728): 	at java.lang.reflect.Method.invoke(Native Method)
E/flutter (20728): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
E/flutter (20728): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
E/flutter (20728): )
E/flutter (20728): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
E/flutter (20728): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
E/flutter (20728): <asynchronous suspension>
E/flutter (20728): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter (20728): #3      IamportUrl.launch (package:iamport_flutter/model/iamport_url.dart:84:10)
E/flutter (20728): #4      _IamportPaymentState.initState.<anonymous closure> (package:iamport_flutter/iamport_payment.dart:92:28)
E/flutter (20728): #5      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (20728): #6      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (20728): #7      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (20728): #8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (20728): #9      _DelayedData.perform (dart:async/stream_impl.dart:611:14)
E/flutter (20728): #10     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:730:11)
E/flutter (20728): #11     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:687:7)
E/flutter (20728): #12     _rootRun (dart:async/zone.dart:1182:47)
E/flutter (20728): #13     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (20728): #14     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (20728): #15     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (20728): #16     _rootRun (dart:async/zone.dart:1190:13)
E/flutter (20728): #17     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (20728): #18     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (20728): #19     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (20728): #20     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (20728): #21     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter (20728): 

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

그리고 웹뷰 결제화면이 열릴때,

I/chromium(20728): [INFO:CONSOLE(1)] "Uncaught ReferenceError: IMP is not defined", source: https://ksmobile.inicis.com/smart/wcard/?isBlockBack=INIpayTest20210510115628925394&payType=wcard (1)

이런 로그가 찍히는데 문제가 없는건가요?

iOS에서는 정상적으로 동작합니다.

@SoleeChoi
Copy link
Contributor

SoleeChoi commented May 10, 2021

안녕하세요 아임포트 기술지원팀입니다.

디버깅 감사드립니다!!
네, IMP is not defined 로그는 무시하셔도 됩니다.

혹시 귀하의 앱의 플러터 버전이 V2인가요?
현재 iamport_flutter 패키지는 플러터 V1만 지원하고 있기 때문에 V2 앱에서 iamport_flutter 연동시 예상치 못한 이슈가 있을 수 있습니다.
현재 V2 지원을 위한 마이그레이션 작업을 진행중이며 iamport_flutter 모듈이 dependent한 외부 라이브러리도 변경해야하는 만큼(flutter_webview_plugin은 V1만 지원) 다소 시간이 소요될 것으로 예상됩니다.

만약 현재 귀하의 앱 플러터 버전이 V1이라면 한 번 더 디버깅 부탁드립니다.
앞서 안내드린 같은 파일(iamport_flutter/java/kr.iamport.iamport_flutter/IamportFlutterPlugin.java)에서 아래 3개 지점에 브레이크 포인트를 찍어 주시고 디버그 모드로 앱을 실행하셨을때 아래와 같이 this, parsingUri, uri, newIntent 그리고 activity에 어떤 값이 들어가있는지 확인(캡쳐본 주시면 제일 좋습니다) 부탁드립니다.

image

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

일단, 말씀하신 IamportFlutterPlugin.java / launch 메소드에 도달하지 못하는듯합니다. IamportPayment.dart 에서 await iamportUrl.launch(); 에서 오류가 나느거 같네요

Screen Shot 2021-05-10 at 3 21 39 PM

Screen Shot 2021-05-10 at 3 21 46 PM

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021 via email

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

보내주신 에러 로그를 보면

E/MethodChannel#iamport_flutter(20728): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.startActivity(android.content.Intent)' on a null object reference
E/MethodChannel#iamport_flutter(20728): 	at kr.iamport.iamport_flutter.IamportFlutterPlugin.startNewActivity(IamportFlutterPlugin.java:93)

dart단에서 찍히는 에러는 native단에서 찍히는 에러가 전달된 것으로
IamportFlutterPlugin.java의 93번째 줄에서 NullPointerException 에러가 나고 있기 때문에
activity값이 null일 것으로 추정되므로 해당 row에서 브레이크 포인트를 찍어주시기를 요청드렸습니다.

image

즉, 처음에 1번 코드가 실행되어 activity 변수에 값이 할당되고
외부 앱으로 이동시 2번 코드가 실행되고 결론적으로 3번 코드가 실행되는데
현재 3번에서 activity가 null이라 에러가 나는 것이므로 1번 코드가 어떤 이유에서인지 실행되지 않은 것 같아 디버깅을 요청드렸습니다.
(실제로 1번 코드를 주석 처리한 후 확인해보면 고객님과 같은 에러가 나면서 외부 앱으로 이동하지 않습니다.)

다시 한 번 제가 안내드린 1, 2, 3번 영역에 브레이크 포인트를 찍어주시고 스크린샷 첨부 부탁드립니다.
더불어 무조건 어떤 상황에서도 외부 앱으로 이동이 안되는 것인지(백그라운드로 갔다가 다시 돌아온다든가, 시간이 좀 소요된 후 다시 시도한다든가 등)
테스트하고 계신 기기의 안드로이드 버전 정보도 함께 전달 부탁드립니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

처음 테스트할때도 1, 2, 3 모두 브레이크 포인터를 찍어었는데, 1번은 호출되지 않았습니다. 1번이 사용되지않는거 같아요

Screen Shot 2021-05-10 at 3 59 47 PM

그리고 결제이동(다른 결제 앱 이동) 버튼을 클릭했을때 아무런 동작을 하지않습니다.

안드로이드 버전 7.0

입니다.

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

아 그러시다면 두 가지만 확인 한 번 더 부탁드립니다.

app/java/[패키지명]/MainActivity.java의 onCreate 메소드에서 아래와 같이 GeneratedPluginRegistrant.registerWidth(this) 함수를 호출하고 있는지
image

app/java/io.flutter.plugins.GeneratedPluginRegistrant.java의 registerWidth 메소드에서 아래와 같이 IamportFlutterPlugin.registerWidth 함수를 호출하고 있는지
image

사실 위 두 로직은 flutter pub get 명령어로 iamport_flutter 패키지 설치에 성공하면 자동으로 추가되는 것인데
현재 registerWith 함수가 호출되지 않는다는 것은 위 두 로직 중에 하나가 빠진 것으로 밖에 볼 수 없기 때문입니다.

만약 두 로직 모두 적용되어있다면 저희가 고객님의 앱 전체를 받아서 직접 디버깅 해보는 것 말고는 방법이 없을 것 같습니다...
감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

음 일단 저희가 Kotlin을 베이스로 해서 아래와 소스가 같습니다.

Screen Shot 2021-05-10 at 5 12 25 PM

Screen Shot 2021-05-10 at 5 14 48 PM

전체 디버깅을 하신다고 하면 깃에 초대해드리면 될까요?

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

그럼 현재 GeneratedPluginRegistarant 클래스 내부 로직 중 IamportFlutterPlugin.registerWith 함수를 콜 하는 부분은 없는건가요...?
그렇다면 애초에 단 한 번도 안됐어야 정상인데...되는걸 확인하시고 배포하셨다가 어느 순간부터 안되신다는 것이 기술적으로 이해하기 힘드네요 ㅠㅠ

java단 로직은 flutter pub get으로 패키지 설치시, 기본적으로 모든 플러그인의 registerWith 함수를 콜하는 로직이 자동으로 추가되는데
kotlin은 그렇지 않은건지 아니면 다른 플러그인은 있는데 IamportFlutterPlugin만 registerWith 호출 부분만 누락된 것인지 확인해봐야할 것 같습니다.

GeneratedPluginRegistarant.kt 코드만 전체 한 번 보여주실 수 있으실까요?
일단 원인은 IamportFlutterPlugin.registerWith 함수가 호출되지 않는 것으로 확인됐네요.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

네넵!!! 소스코드 올리겠습니다.

package io.flutter.plugins;

import androidx.annotation.Keep;
import androidx.annotation.NonNull;

import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;

/**
 * Generated file. Do not edit.
 * This file is generated by the Flutter tool based on the
 * plugins that support the Android platform.
 */
@Keep
public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
    flutterEngine.getPlugins().add(new com.example.appsettings.AppSettingsPlugin());
    flutterEngine.getPlugins().add(new com.blasanka.s3flutter.aws_s3.AwsS3Plugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.deviceinfo.DeviceInfoPlugin());
    flutterEngine.getPlugins().add(new id.oddbit.flutter.facebook_app_events.FacebookAppEventsPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebaseanalytics.FirebaseAnalyticsPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.crashlytics.FlutterFirebaseCrashlyticsPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin());
      io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin());
      com.flutter_webview_plugin.FlutterWebviewPlugin.registerWith(shimPluginRegistry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.googlemaps.GoogleMapsPlugin());
    flutterEngine.getPlugins().add(new kr.iamport.iamport_flutter.IamportFlutterPlugin());
    flutterEngine.getPlugins().add(new vn.hunghd.flutter.plugins.imagecropper.ImageCropperPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.imagepicker.ImagePickerPlugin());
      com.kakao.sdk.flutter.KakaoFlutterSdkPlugin.registerWith(shimPluginRegistry.registrarFor("com.kakao.sdk.flutter.KakaoFlutterSdkPlugin"));
    flutterEngine.getPlugins().add(new com.vitanov.multiimagepicker.MultiImagePickerPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.packageinfo.PackageInfoPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
    flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
    flutterEngine.getPlugins().add(new com.aboutyou.dart_packages.sign_in_with_apple.SignInWithApplePlugin());
    flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
    flutterEngine.getPlugins().add(new name.avioli.unilinks.UniLinksPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.videoplayer.VideoPlayerPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin());
  }
}

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

네 안내드린대로 다른 패키지에 대해서는 있는데 IamportFlutterPlugin.registerWith를 콜하는 부분이 없네요.
코틀린 환경에서는 자동으로 안되고 이를 수동으로 추가해야되는건지는 잘 모르겠는데...
com.kakao.sdk.flutter.KakaoFlutterSdkPlugin.registerWith(shimPluginRegistry.registrarFor("com.kakao.sdk.flutter.KakaoFlutterSdkPlugin 이처럼 IamportFlutterPlugin에 대해서도 앞서 안내드린 스크린샷 화면처럼 registerWith 함수 콜 하는 부분 추가해주시고 다시 확인해보시면 될 것 같습니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

말씀하신대로 추가한후, 빌드해서 앱을 실행하면 iamport registerWith가 사라집니다.

kr.iamport.iamport_flutter.IamportFlutterPlugin.registerWith(shimPluginRegistry.registrarFor("kr.iamport.iamport_flutter.IamportFlutterPlugin"));

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

혹시 해당 코드를 안드로이드 스튜디오에서 추가하신것이 아니고 Visual Studio Code 같은 다른 IDE에서 추가하신게 아니실까요?
고객님이 코틀린 환경이라는 것을 알게 된 후
코틀린용 플러터 예제 앱을 만들고($flutter create -a kotlin example) 디버깅 해 본 결과
겪고 계신 현상이 재현되어 안드로이드 스튜디오에서 앞서 안내드린대로 아래와 같이 IamportFlutterPlugin.registerWith 호출 부분을 추가한 후 빌드해 본 결과 정상적으로 앱이 동작하는 것을 확인하였습니다.

package io.flutter.plugins;

import androidx.annotation.Keep;
import androidx.annotation.NonNull;

import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;

/**
 * Generated file. Do not edit.
 * This file is generated by the Flutter tool based on the
 * plugins that support the Android platform.
 */
@Keep
public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
      com.flutter_webview_plugin.FlutterWebviewPlugin.registerWith(shimPluginRegistry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
    flutterEngine.getPlugins().add(new kr.iamport.iamport_flutter.IamportFlutterPlugin());
      kr.iamport.iamport_flutter.IamportFlutterPlugin.registerWith(shimPluginRegistry.registrarFor("kr.iamport.iamport_flutter.IamportFlutterPlugin"));
    flutterEngine.getPlugins().add(new name.avioli.unilinks.UniLinksPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
  }
}

안드로이드 스튜디오에서 IDE의 도움(힌트)을 받아 다시 추가해보시고 빌드 후 확인 부탁드립니다.
혹시 몰라 제가 테스트 한 앱 압축해 메일로 첨부 드립니다.

아마 코틀린용 플러터 앱에서 flutter pub get시 자동으로 registerWith 함수가 추가되게 하려면 별도의 조치가 필요해 보이고
코드 수정 및 버전 업그레이드엔 다소 시간이 소요되기 때문에 우선 앱이 이미 런칭됐다고 하시니 급하신대로 위와 같이 조치하시길 권장드립니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

임의로 코드를 추가해도 계속 재생성이 되서 사라지는데 혹시 IDE 에서 어떠한걸 이용하면 될까요?

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

안드로이드 스튜디오에서 해당 라인 전체 복사가 아닌, 알파벳 하나하나 타이핑 하시다보면 밑에 IDE가 힌트(?)를 알려주는데 저는 그 힌트를 입력했습니다.
예를 들어 k만 쳐도 밑에 kr이 나오고 그 kr을 누른 후 kr.인 상태에서 i를 치면 밑에 iamport가 나오고 이를 선택하는 방식으로 끝까지 입력해보실 수 있으실까요?

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 10, 2021

음.. 늦은 시간 죄송합니다.. 그런데 지금 서비스가 되고있는중이라 ㅜㅜ

아 저는 말씀하신대로 직접 타이핑을 해도 어시스턴트가 나타나지가 않네요 ㅜㅜ

@SoleeChoi
Copy link
Contributor

SoleeChoi commented May 10, 2021

안녕하세요 아임포트 기술지원팀입니다.

그렇군요...잘 이해되진 않고 완벽한 해결 방법은 아니지만 일단 브랜치를 따서
ActivityAware 인터페이스를 implement 하는 방향으로 적용해보았습니다.

삼성 앱카드는 안되는 것 같은데 일단 다른 앱카드(씨티카드, ISP/페이북 등)는 원활히 이동하네요...
-> 이는 제 개발 환경 와이파이 이슈였던 것으로 파악됩니다. 현재는 모두 잘 되네요.

일단 급한대로 아래와 같이 feature/kotlin 브랜치를 적용 후 다시 시도해보시길 바랍니다.

image

감사합니다.

@SoleeChoi
Copy link
Contributor

안녕하세요 아임포트 기술지원팀입니다.

어제 임시 반영한 feature/kotlin 브랜치 코드를 조금 다듬은 후 자바/코틀린 환경에서 모두 정상 동작 하는 것을 확인하였습니다.
v0.9.15에 배포되었으니 확인 부탁드립니다.

애초에 코틀린 환경이라는 점을 늦게 인지하여 대응에 다소 시간이 소요된 것 같습니다.
저희측에서도 코틀린 환경에서 registerWith 함수 호출 부가 자동으로 추가되지 않는 점을 미리 알고 대비했어야 했는데
그러지 못해 혼란을 드린 것 같습니다. 양해 부탁드립니다.

감사합니다.

@ijunc2
Copy link
Author

ijunc2 commented May 11, 2021 via email

@SoleeChoi SoleeChoi added bug Something isn't working good first issue Good for newcomers labels May 11, 2021
@jeiea
Copy link

jeiea commented May 12, 2021

@SoleeChoi 이전에 제보했던 것과 같은 이슈로 보입니다. 저도 최신 버전 결제 문제가 사라졌네요.

확인차 말씀드리는데 말하셨던 V2가 플러터 2버전을 의미했던 건지 여쭙니다. 저는 저 이슈에서 답변받은 V2가 android embedding v2를 의미한다고 생각했는데 이걸 보니 그게 아닐 것 같다는 생각이 듭니다.

플러터 2와는 별개로 플러그인 API도 v1, v2가 나뉘는데 이건 플러터 버전과는 별개여서 플러터 1버전에서 재현된 것으로 보입니다. 커밋을 보니 아직 android embedding v2 마이그레이션이 완전히 된 것 같지 않아보여 플러그인, 마이그레이션을 확인해주실 수 있을까 합니다.

@ijunc2 ijunc2 closed this as completed May 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants