OneSignal / OneSignal-Android-SDK

OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your native Android or Amazon app with OneSignal. https://onesignal.com
Other
604 stars 368 forks source link

[Bug]: Crash null cannot be cast to non-null type com.amazon.device.iap.PurchasingListener with Version 5.0.0 #1813

Closed suyashraikar closed 8 months ago

suyashraikar commented 1 year ago

What happened?

The latest (5.0.0) version of SDK crashes during initialization using OneSignal.initWithContext(Context, String) method The attached crash log is extracted from my application

Steps to reproduce?

- Install Release 5.0.0 version
- Initalize SDK using OneSignal.initWithContext(getRepository().getContext(),oneSignalId) in Application class
- Observe crash

What did you expect to happen?

Code should work without any crash

OneSignal Android SDK version

Release 5.0.0

Android version

13

Specific Android models

No response

Relevant log output

Process: com.simpletherapy.android.mhealth, PID: 18149
                                                                                                    java.lang.RuntimeException: Unable to create application com.simpletherapy.android.SimpleTherapyApplication: java.lang.NullPointerException: null cannot be cast to non-null type com.amazon.device.iap.PurchasingListener
                                                                                                        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6955)
                                                                                                        at android.app.ActivityThread.access$1300(ActivityThread.java:260)
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1972)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                        at android.os.Looper.loop(Looper.java:223)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:7989)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:635)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)
                                                                                                    Caused by: java.lang.NullPointerException: null cannot be cast to non-null type com.amazon.device.iap.PurchasingListener
                                                                                                        at com.onesignal.core.internal.purchases.impl.TrackAmazonPurchase.start(TrackAmazonPurchase.kt:83)
                                                                                                        at com.onesignal.core.internal.startup.StartupService.start(StartupService.kt:16)
                                                                                                        at com.onesignal.internal.OneSignalImp.initWithContext(OneSignalImp.kt:247)
                                                                                                        at com.onesignal.OneSignal.initWithContext(OneSignal.kt:126)
                                                                                                        at com.simpletherapy.android.SimpleTherapyApplication.onCreate(SimpleTherapyApplication.java:187)
                                                                                                        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192)
                                                                                                        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6949)
                                                                                                        at android.app.ActivityThread.access$1300(ActivityThread.java:260) 
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1972) 
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                        at android.os.Looper.loop(Looper.java:223) 
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:7989) 
                                                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:635) 
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)

Code of Conduct

jennantilla commented 1 year ago

Hi @suyashraikar thanks for reaching out! We'll investigate this.

suyashraikar commented 1 year ago

@jennantilla I am using OneSignal SDK [5.0.0, 5.99.99]

minSdkVersion : 21, // 19 kitkat, targetSdkVersion : 34, compileSdkVersion: 34

Also enable required details for Amazon app store too.

xmlns:amazon="http://schemas.amazon.com/apk/res/android"

<uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
<uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />

<amazon:enable-feature android:name="com.amazon.device.messaging" android:required="false" />

    <receiver
        android:name="com.onesignal.notifications.receivers.ADMMessageReceiver"
        android:permission="com.amazon.device.messaging.permission.SEND"
        tools:ignore="Instantiatable"
        android:exported="false">
        <intent-filter>
            <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
            <action android:name="com.amazon.device.messaging.intent.RECEIVE" />

            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

@jennantilla Please look into it and let us know, Thanks for your consideration

suhaspalkar commented 1 year ago

Class name: TrackAmazonPurchase Line No. : #83 osPurchasingListener!!.orgPurchasingListener = locListenerHandlerField.get(listenerHandlerObject) as PurchasingListener @jennantilla This line is causing for the crash because 'locListenerHandlerField.get(listenerHandlerObject)' is null.

suyashraikar commented 1 year ago

@jennantilla any updates ?

arthurgeron-work commented 12 months ago

Unfortunately the temporary fix for me was to add try/catch, has happened only on Xiaomi or Motorola devices on Android 13+. I have two separate stack traces, all from initWithContext:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7619)
  at android.app.ActivityThread.-$$Nest$mhandleBindApplication
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2400)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:226)
  at android.os.Looper.loop (Looper.java:313)
  at android.app.ActivityThread.main (ActivityThread.java:8757)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067)
Caused by java.lang.NullPointerException:
  at com.onesignal.core.internal.application.impl.ApplicationService.getAppContext (ApplicationService.kt:3)
  at com.onesignal.core.internal.device.impl.DeviceService.packageInstalledAndEnabled (DeviceService.kt:3)
  at com.onesignal.core.internal.device.impl.DeviceService.isGMSInstalledAndEnabled (DeviceService.kt:3)
  at com.onesignal.core.internal.device.impl.DeviceService.supportsGooglePush (DeviceService.kt:9)
  at com.onesignal.core.internal.device.impl.DeviceService.getDeviceType (DeviceService.kt:10)
  at com.onesignal.core.internal.device.impl.DeviceService.isAndroidDeviceType (DeviceService.kt:1)
  at com.onesignal.location.LocationModule$register$1.invoke (LocationModule.kt:3)
  at com.onesignal.location.LocationModule$register$1.invoke (LocationModule.kt:1)
  at com.onesignal.common.services.ServiceRegistrationLambda.resolve (ServiceRegistration.kt:13)
  at com.onesignal.common.services.ServiceProvider.getServiceOrNull (ServiceProvider.kt:51)
  at com.onesignal.common.services.ServiceProvider.getService (ServiceProvider.kt:6)
  at com.onesignal.common.services.ServiceRegistrationReflection.resolve (ServiceRegistration.kt:208)
  at com.onesignal.common.services.ServiceProvider.getServiceOrNull (ServiceProvider.kt:51)
  at com.onesignal.common.services.ServiceProvider.getService (ServiceProvider.kt:6)
  at com.onesignal.common.services.ServiceRegistrationReflection.resolve (ServiceRegistration.kt:208)
  at com.onesignal.common.services.ServiceProvider.getServiceOrNull (ServiceProvider.kt:51)
  at com.onesignal.common.services.ServiceProvider.getService (ServiceProvider.kt:6)
  at com.onesignal.internal.OneSignalImp.initWithContext (OneSignalImp.kt:233)
  at com.onesignal.OneSignal.initWithContext (OneSignal.kt:1)
  at com.tradersclub.tc.MainApplication.onCreate (MainApplication.java:25)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1266)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7614)

Second:


First stacktrace:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7232)
  at android.app.ActivityThread.-$$Nest$mhandleBindApplication
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2241)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:211)
  at android.os.Looper.loop (Looper.java:300)
  at android.app.ActivityThread.main (ActivityThread.java:8395)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:559)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:954)
Caused by java.lang.reflect.InvocationTargetException:
  at java.lang.reflect.Constructor.newInstance0
  at java.lang.reflect.Constructor.newInstance (Constructor.java:343)
  at com.onesignal.common.services.ServiceRegistrationReflection.resolve (ServiceRegistration.kt:238)
  at com.onesignal.common.services.ServiceProvider.getServiceOrNull (ServiceProvider.kt:51)
  at com.onesignal.common.services.ServiceProvider.getService (ServiceProvider.kt:6)
  at com.onesignal.internal.OneSignalImp.initWithContext (OneSignalImp.kt:76)
  at com.onesignal.OneSignal.initWithContext (OneSignal.kt:1)
  at com.tradersclub.tc.MainApplication.onCreate (MainApplication.java:25)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1289)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7226)
Caused by java.lang.NullPointerException:
  at com.onesignal.core.internal.application.impl.ApplicationService.getAppContext (ApplicationService.kt:3)
  at com.onesignal.core.internal.preferences.impl.PreferencesService.getSharedPrefsByName (PreferencesService.kt:4)
  at com.onesignal.core.internal.preferences.impl.PreferencesService.get (PreferencesService.kt:38)
  at com.onesignal.core.internal.preferences.impl.PreferencesService.getString (PreferencesService.kt:13)
  at com.onesignal.common.modeling.ModelStore.load (ModelStore.kt:29)
  at com.onesignal.common.modeling.SimpleModelStore.<init> (SimpleModelStore.kt:4)
  at com.onesignal.core.internal.config.ConfigModelStore.<init> (ConfigModelStore.kt:12)
jennantilla commented 8 months ago

Hello everyone, apologies that I did not follow up here. This should be fixed in SDK versions 5.0.3 and later. Please let us know if you are still experiencing any issues after upgrading.

Thanks!