OneSignal-Android-SDK icon indicating copy to clipboard operation
OneSignal-Android-SDK copied to clipboard

[Bug]: 5.1.4 - NullPointerException: null cannot be cast to non-null type kotlin.String crashes on Startup

Open CarlBarks opened this issue 1 year ago • 2 comments

What happened?

We experienced a NullPointer on initialisation which causes the app to crash on startup. We are on 5.1.4

Might be related to https://github.com/OneSignal/OneSignal-Android-SDK/issues/1990 but the logoutput there suggests a crash at a different place

Seems more related to https://github.com/OneSignal/OneSignal-Android-SDK/issues/1745 however, that was closed in March 2023.

Steps to reproduce?

Not easily reproducible 

1. OneSignal Android SDK `5.1.4`
2. `initWithContext` 
3. Experience crash on Crashlytics

What did you expect to happen?

OneSignal to get initialised without issues across all users and devices

OneSignal Android SDK version

5.1.4

Android version

9

Specific Android models

No response

Relevant log output

Fatal Exception: java.lang.RuntimeException
Unable to create application xxx: java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
Caused by java.lang.NullPointerException
null cannot be cast to non-null type kotlin.String
com.onesignal.common.modeling.Model.getStringProperty (Model.kt:491)
com.onesignal.common.modeling.Model.getStringProperty$default (Model.kt:488)
com.onesignal.user.internal.identity.IdentityModel.getOnesignalId (IdentityModel.kt:19)
com.onesignal.user.internal.operations.impl.listeners.SubscriptionModelStoreListener.getUpdateOperation (SubscriptionModelStoreListener.kt:48)
com.onesignal.user.internal.operations.impl.listeners.SubscriptionModelStoreListener.getUpdateOperation (SubscriptionModelStoreListener.kt:15)
com.onesignal.core.internal.operations.listeners.ModelStoreListener.onModelUpdated (ModelStoreListener.kt:52)
com.onesignal.common.modeling.ModelStore$onChanged$1.invoke (ModelStore.kt:91)
com.onesignal.common.modeling.ModelStore$onChanged$1.invoke (ModelStore.kt:91)
com.onesignal.common.events.EventProducer.fire (EventProducer.kt:50)
com.onesignal.common.modeling.ModelStore.onChanged (ModelStore.kt:91)
com.onesignal.common.modeling.Model$notifyChanged$1.invoke (Model.kt:666)
com.onesignal.common.modeling.Model$notifyChanged$1.invoke (Model.kt:666)
com.onesignal.common.events.EventProducer.fire (EventProducer.kt:50)
com.onesignal.common.modeling.Model.notifyChanged (Model.kt:666)
com.onesignal.common.modeling.Model.setOptAnyProperty (Model.kt:460)
com.onesignal.common.modeling.Model.setOptEnumProperty$default (Model.kt:327)
com.onesignal.user.internal.subscriptions.SubscriptionModel.getStatus (SubscriptionModel.kt:117)
com.onesignal.user.internal.PushSubscription.getOptedIn (PushSubscription.kt:22)
com.onesignal.user.internal.PushSubscription.fetchState (PushSubscription.kt:44)
com.onesignal.user.internal.PushSubscription.<init> (PushSubscription.kt:15)
com.onesignal.user.internal.subscriptions.impl.SubscriptionManager.createSubscriptionFromModel (SubscriptionManager.kt:232)
com.onesignal.user.internal.subscriptions.impl.SubscriptionManager.createSubscriptionAndAddToSubscriptionList (SubscriptionManager.kt)
com.onesignal.user.internal.subscriptions.impl.SubscriptionManager.onModelAdded (SubscriptionManager.kt:149)
com.onesignal.user.internal.subscriptions.impl.SubscriptionManager.onModelRemoved (SubscriptionManager.kt:41)
com.onesignal.user.internal.subscriptions.impl.SubscriptionManager.onModelAdded (SubscriptionManager.kt:41)
com.onesignal.common.modeling.ModelStore$addItem$2.invoke (ModelStore.kt:138)
com.onesignal.common.modeling.ModelStore$addItem$2.invoke (ModelStore.kt:138)
com.onesignal.common.events.EventProducer.fire (EventProducer.kt:50)
com.onesignal.common.modeling.ModelStore.addItem (ModelStore.kt:138)
com.onesignal.common.modeling.ModelStore.addItem$default (ModelStore.kt:121)
com.onesignal.common.modeling.ModelStore.add (ModelStore.kt:49)
com.onesignal.internal.OneSignalImp.initWithContext (OneSignalImp.kt:299)
com.onesignal.OneSignal.initWithContext (OneSignal.kt:135)
xxx.onCreate (CustomApplication.kt:40)
android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1154)

Code of Conduct

  • [X] I agree to follow this project's Code of Conduct

CarlBarks avatar Feb 15 '24 08:02 CarlBarks

Hello @CarlBarks, thanks for sharing the stack trace. Could you provide a little more info with any event listener or observer that you have added under OneSignal?

From the look of the stack trace you were trying to access onesignalId in one of the event handler. Note that onesignalId isn't always available. If that is the case, I would recommend using OneSignal.getUser().addObserver to get the IDs when they are available.

jinliu9508 avatar Feb 22 '24 20:02 jinliu9508

Hi @jinliu9508 , we are not trying to retrieve the oneSignalId anywhere.

The only place where we are using it and we are seeing the crash, is when initialising OneSignal with OneSignal.initWithContext(this, getString(R.string.one_signal_app_id))

The only observer we have is the following: OneSignal.Notifications.addPermissionObserver(this)

Where no onesignalId is used or retrieved.

CarlBarks avatar Feb 23 '24 10:02 CarlBarks

@jinliu9508 and OneSignal team.

We got 18 more crashes in this issue today. An interesting information for you is that 100% of the crashes happen on Samsung Model:Galaxy S7 on Android 8.0.0.

We would highly appreciate if you could look into this issue in one of your upcoming releases.

CarlBarks avatar Feb 26 '24 07:02 CarlBarks

@jinliu9508 and OneSignal team.

We got 18 more crashes in this issue today. An interesting information for you is that 100% of the crashes happen on Samsung Model:Galaxy S7 on Android 8.0.0.

We would highly appreciate if you could look into this issue in one of your upcoming releases.

@CarlBarks Thanks for the additional info! The team is currently looking into this bug and it is determined that this issue is caused by the migration from v4 to v5. We will keep you posted once an update is out.

jinliu9508 avatar Feb 26 '24 15:02 jinliu9508

Hello, got the same identical crashes (lots of them) on 1S SDK 5.1.4, on all sorts of devices and OS versions. We do access onesignalId after we initWithContext. If you need any additional info, please do tell and I'll try to provide it.

OneSignal.initWithContext(this, getString(R.string.onesignal_id))
val userId = OneSignal.User.onesignalId

Also, do you perhaps know a good workaround to avoid the crash?

alenjularic avatar Feb 28 '24 14:02 alenjularic

@alenjularic @CarlBarks a fix for this is now available in OneSignal-Android-SDK 5.1.6

jkasten2 avatar Mar 01 '24 22:03 jkasten2