adaptyteam / AdaptySDK-Flutter

SDK for growing mobile in-app purchases
https://docs.adapty.io/docs/quickstart
MIT License
88 stars 15 forks source link

Adapty UI builder crashing on Android #97

Closed PetrKubes97 closed 7 months ago

PetrKubes97 commented 9 months ago

Hi, I'm trying to use the Adapty UI builder. The UI correctly displays on iOS devices, however, is crashes on Android with the following stack-trace. Any help appreciated.

E/AndroidRuntime(22801): java.lang.RuntimeException: Unable to start activity ComponentInfo{<redacted>/com.adapty.internal.crossplatform.ui.AdaptyUiActivity}: com.google.gson.JsonIOException: Abstract classes can't be instantiated! Register an InstanceCreator or a TypeAdapter for this type. Class name: com.adapty.models.AdaptyViewConfiguration$Asset E/AndroidRuntime(22801): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3780) E/AndroidRuntime(22801): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3942) E/AndroidRuntime(22801): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:109) E/AndroidRuntime(22801): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) E/AndroidRuntime(22801): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) E/AndroidRuntime(22801): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345) E/AndroidRuntime(22801): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(22801): at android.os.Looper.loopOnce(Looper.java:233) E/AndroidRuntime(22801): at android.os.Looper.loop(Looper.java:344) E/AndroidRuntime(22801): at android.app.ActivityThread.main(ActivityThread.java:8212) E/AndroidRuntime(22801): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(22801): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) E/AndroidRuntime(22801): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) E/AndroidRuntime(22801): Caused by: com.google.gson.JsonIOException: Abstract classes can't be instantiated! Register an InstanceCreator or a TypeAdapter for this type. Class name: com.adapty.models.AdaptyViewConfiguration$Asset E/AndroidRuntime(22801): at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:136) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.createAccumulator(ReflectiveTypeAdapterFactory.java:425) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:381) E/AndroidRuntime(22801): at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) E/AndroidRuntime(22801): at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186) E/AndroidRuntime(22801): at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:144) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.readIntoField(ReflectiveTypeAdapterFactory.java:212) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:431) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:391) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.readIntoField(ReflectiveTypeAdapterFactory.java:212) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:431) E/AndroidRuntime(22801): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:391) E/AndroidRuntime(22801): at com.google.gson.Gson.fromJson(Gson.java:1214) E/AndroidRuntime(22801): at com.google.gson.Gson.fromJson(Gson.java:1124) E/AndroidRuntime(22801): at com.google.gson.Gson.fromJson(Gson.java:1034) E/AndroidRuntime(22801): at com.google.gson.Gson.fromJson(Gson.java:969) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.SerializationHelper.fromJson(SerializationHelper.kt:67) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.CrossplatformHelper.fromJson(CrossplatformHelper.kt:33) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.ui.PaywallUiManager.getPersistedData(PaywallUiManager.kt:86) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.ui.PaywallUiManager.getData(PaywallUiManager.kt:18) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.ui.PaywallUiManager.setCurrentView(PaywallUiManager.kt:68) E/AndroidRuntime(22801): at com.adapty.internal.crossplatform.ui.AdaptyUiActivity.onCreate(AdaptyUiActivity.kt:39) E/AndroidRuntime(22801): at android.app.Activity.performCreate(Activity.java:8129) E/AndroidRuntime(22801): at android.app.Activity.performCreate(Activity.java:8109) E/AndroidRuntime(22801): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344) E/AndroidRuntime(22801): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3749) E/AndroidRuntime(22801): ... 12 more

vladd-g commented 9 months ago

hi @PetrKubes97, thank you! We will investigate the issue and get back to you soon.

vladd-g commented 9 months ago

hi @PetrKubes97, we've fixed it in v2.0.4 of the AdaptyUI library

PetrKubes97 commented 8 months ago

Hi, I've tryied with the new version, but still having some issues.

E/MethodChannel#flutter.adapty.com/adapty_ui(28511): Failed to handle method call
E/MethodChannel#flutter.adapty.com/adapty_ui(28511): java.lang.IllegalArgumentException: Unsupported value: 'WRONG_PARAMETER' of type 'class com.adapty.errors.AdaptyErrorCode'
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:297)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:285)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:78)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:268)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.bridgeError(AdaptyUiCallHandler.kt:140)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.handlePresentView$lambda-6(AdaptyUiCallHandler.kt:73)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.$r8$lambda$yy3V6wLNGj7cclf3N6TZFOOLWkc(Unknown Source:0)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler$$ExternalSyntheticLambda2.invoke(Unknown Source:6)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.internal.crossplatform.ui.CrossplatformUiHelper.handlePresentView(CrossplatformUiHelper.kt:66)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.handlePresentView(AdaptyUiCallHandler.kt:70)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.onMethodCall(AdaptyUiCallHandler.kt:25)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.adapty.adapty_ui_flutter.AdaptyUiFlutterPlugin.onMethodCall(AdaptyUiFlutterPlugin.kt:32)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at android.os.Handler.handleCallback(Handler.java:938)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at android.os.Looper.loopOnce(Looper.java:233)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at android.os.Looper.loop(Looper.java:344)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at android.app.ActivityThread.main(ActivityThread.java:8212)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
E/MethodChannel#flutter.adapty.com/adapty_ui(28511):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
E/flutter (28511): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, Unsupported value: 'WRONG_PARAMETER' of type 'class com.adapty.errors.AdaptyErrorCode', null, java.lang.IllegalArgumentException: Unsupported value: 'WRONG_PARAMETER' of type 'class com.adapty.errors.AdaptyErrorCode'
E/flutter (28511):  at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:297)
E/flutter (28511):  at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:285)
E/flutter (28511):  at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:78)
E/flutter (28511):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:268)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.bridgeError(AdaptyUiCallHandler.kt:140)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.handlePresentView$lambda-6(AdaptyUiCallHandler.kt:73)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.$r8$lambda$yy3V6wLNGj7cclf3N6TZFOOLWkc(Unknown Source:0)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler$$ExternalSyntheticLambda2.invoke(Unknown Source:6)
E/flutter (28511):  at com.adapty.internal.crossplatform.ui.CrossplatformUiHelper.handlePresentView(CrossplatformUiHelper.kt:66)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.handlePresentView(AdaptyUiCallHandler.kt:70)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiCallHandler.onMethodCall(AdaptyUiCallHandler.kt:25)
E/flutter (28511):  at com.adapty.adapty_ui_flutter.AdaptyUiFlutterPlugin.onMethodCall(AdaptyUiFlutterPlugin.kt:32)
E/flutter (28511):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/flutter (28511):  at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/flutter (28511):  at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/flutter (28511):  at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/flutter (28511):  at android.os.Handler.handleCallback(Handler.java:938)
E/flutter (28511):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/flutter (28511):  at android.os.Looper.loopOnce(Looper.java:233)
E/flutter (28511):  at android.os.Looper.loop(Looper.java:344)
E/flutter (28511):  at android.app.ActivityThread.main(ActivityThread.java:8212)
E/flutter (28511):  at java.lang.reflect.Method.invoke(Native Method)
E/flutter (28511):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
E/flutter (28511):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
E/flutter (28511): )
E/flutter (28511): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter (28511): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter (28511): <asynchronous suspension>
E/flutter (28511): #2      AdaptyUI._invokeMethodHandlingErrors (package:adapty_ui_flutter/src/adaptyui.dart:107:22)
E/flutter (28511): <asynchronous suspension>
E/flutter (28511): 

It has shown successfully on the first try, but the close button did not work, even when I call view.dismiss() on AdaptyUIActionType.close. On the second attempt of displaying the UI, I got the error above.

Works on iOS though. 🤷

deps: adapty_flutter: ^2.7.1 adapty_ui_flutter: ^2.0.4

vladd-g commented 8 months ago

@PetrKubes97 thank you for the logs, we'll investigate it

vladd-g commented 8 months ago

@PetrKubes97 could you please also provide the logs of the case when the close button is clicked on the first try?

PetrKubes97 commented 8 months ago

There are no logs. I've also noticed that neither the Terms nor Privacy buttons work, whereas it's all running well on iOS (exact same build). So almost looks like the AdaptyObserver is not getting triggered on Android.

vladd-g commented 8 months ago

Could you please check how it works on our sample app? But with your app's applicationId in build.gradle and your Adapty key. Just as it were your app, but with our sample's sources

PetrKubes97 commented 8 months ago

The sample app works but I'm still getting the error and I'm unsure how to resolve it. I've removed the observer, so the code is literally just:

final view = await AdaptyUI().createPaywallView(paywall: paywall, locale: 'en');
view.present();

Looking in the logs by setting adapty logger to verbose, all of the network requests are successful, but the crash happens somewhere in the android code after view.present(); is called. I'm not sure how to debug it.

I've also tried flutter clean, but that did not help.

vladd-g commented 8 months ago

Thank you!

The sample app works but I'm still getting the error and I'm unsure how to resolve it. I've removed the observer

Am I correct that sample app has worked with no errors, and starting with "I'm still getting the error", including "I've removed the observer", it relates to the original app only?

PetrKubes97 commented 8 months ago

Yes, the sample has worked with no errors.

PetrKubes97 commented 8 months ago

Hi @vladd-g. I think we can close this issue. I have tried it again today with newer version AdaptyUI and I'm not getting these exact stack traces. However, I'm having the exact same error as in this issue: https://github.com/adaptyteam/AdaptyUI-Flutter/issues/8, so we should move there.