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

[Bug]: Crash when call promptForPushNotifications, NullPointerException

Open Kppro opened this issue 3 years ago • 14 comments

What happened?

Crashs at our app startup on Pixels devices with Android 13 and latest release of onesignal sdk (4.8.2)

Steps to reproduce?

When users running Pixels devices with android 13 launch our app

What did you expect to happen?

I expected no crash when calling promptForPushNotifications on an android 13 device

OneSignal Android SDK version

Release 4.8.2

Android version

13

Specific Android models

Google Pixels devices

Relevant log output

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
       at com.onesignal.OSUtils.getTargetSdkVersion(OSUtils.java:490)
       at com.onesignal.NotificationPermissionController.<clinit>(NotificationPermissionController.kt:48)
       at com.onesignal.OneSignal.promptForPushNotifications(OneSignal.java:2864)
       at com.deleev.labellevie.ui.MainActivity.onResume(MainActivity.kt:455)
       at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1564)
       at android.app.Activity.performResume(Activity.java:8437)
       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4763)
       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4806)
       at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
       at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:201)
       at android.os.Looper.loop(Looper.java:288)
       at android.app.ActivityThread.main(ActivityThread.java:7872)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
       
       
       Fatal Exception: java.lang.ExceptionInInitializerError
       at com.onesignal.OneSignal.promptForPushNotifications(OneSignal.java:2864)
       at com.deleev.labellevie.ui.MainActivity.onResume(MainActivity.kt:455)
       at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1564)
       at android.app.Activity.performResume(Activity.java:8437)
       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4763)
       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4806)
       at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
       at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:201)
       at android.os.Looper.loop(Looper.java:288)
       at android.app.ActivityThread.main(ActivityThread.java:7872)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Code of Conduct

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

Kppro avatar Oct 10 '22 15:10 Kppro

Hi @Kppro, from the stack trace it looks like you might be calling OneSignal.promptForPushNotifications before initializing via OneSignal.initWithContext. Can you confirm where you are calling OneSignal.initWithContext ? Thanks!

brismithers avatar Oct 11 '22 16:10 brismithers

I'm having a simillar log as him. My initialization occurs when I build my dependency graph (probably a little after application create). I tried change it to Application.onCreate() but still receiving this exception. To reproduce it, just swipe up the application from recent apps.

2022-10-14 19:08:48.079 E/WM-WorkerWrapper: Work [ id=, tags={ FOCUS_LOST_WORKER_TAG, com.onesignal.OSFocusHandler$OnLostFocusWorker } ] failed because it threw an exception/error
    java.util.concurrent.ExecutionException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
        at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:516)
        at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
        at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:311)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
        at java.lang.Thread.run(Thread.java:1012)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
        at com.onesignal.OSUtils.packageInstalledAndEnabled(OSUtils.java:275)
        at com.onesignal.OSUtils.isGMSInstalledAndEnabled(OSUtils.java:288)
        at com.onesignal.OSUtils.supportsGooglePush(OSUtils.java:330)
        at com.onesignal.OSUtils.getDeviceType(OSUtils.java:349)
        at com.onesignal.OSUtils.isAndroidDeviceType(OSUtils.java:371)
        at com.onesignal.LocationController.isGooglePlayServicesAvailable(LocationController.java:337)
        at com.onesignal.LocationController.onFocusChange(LocationController.java:325)
        at com.onesignal.OneSignal.onAppLostFocus(OneSignal.java:1352)
        at com.onesignal.OSFocusHandler$Companion.onLostFocusDoWork(OSFocusHandler.kt:139)
        at com.onesignal.OSFocusHandler$OnLostFocusWorker.doWork(OSFocusHandler.kt:118)
        at androidx.work.Worker$1.run(Worker.java:86)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) 
        at java.lang.Thread.run(Thread.java:1012) 

rafaz182 avatar Oct 14 '22 22:10 rafaz182

Hi @Kppro, from the stack trace it looks like you might be calling OneSignal.promptForPushNotifications before initializing via OneSignal.initWithContext. Can you confirm where you are calling OneSignal.initWithContext ? Thanks!

Hi @brismithers , I am calling OneSignal.initWithContext in the application onCreate and the crash happens in the MainActivity.onResume (and it's not even my first activity on app startup, there is a LauncherActivity). We didn't had similar crashes before with the way OneSignal is initialized in the app. This crash just started to appear in our last release when I added the promptForPushNotifications to support android 13.

I did multiple test with the emulator but wasn't able to reproduce and I don't have a pixel device at the moment. (but maybe we only see pixels device because they are the first ones with the android 13 update)

Kppro avatar Oct 15 '22 08:10 Kppro

I'm having the same problem but on multiple android versions. All I do is calling:

        OneSignal.initWithContext(this)
        OneSignal.setAppId("myappid")
        OneSignal.promptForPushNotifications()

in my onCreate() but I get a lot of crashes from my users

Here is my crash log:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3473)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3637)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:85)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2105)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:223)
  at android.app.ActivityThread.main (ActivityThread.java:7703)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:612)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:997)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewTreeObserver android.view.View.getViewTreeObserver()' on a null object reference
  at androidx.core.splashscreen.SplashScreen$Impl.setKeepOnScreenCondition (SplashScreen.java)
  at com.onesignal.OneSignal.promptForPushNotifications (OneSignal.java)
  at android.app.Activity.performCreate (Activity.java:8000)
  at android.app.Activity.performCreate (Activity.java:7984)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3446)

the crash happens mainly on Redmi smartphones

DaFaack avatar Dec 31 '22 06:12 DaFaack

Same error occured and caught by Sentry for Pixel XL device (Pixel 4 XL (TP1A.221005.002)) :

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at com.onesignal.OSUtils.o(OSUtils.java:1)
    at com.onesignal.l0.<clinit>(NotificationPermissionController.kt:4)
    at com.onesignal.d3.D1(OneSignal.java:1)
    at com.onesignal.flutter.OneSignalPlugin.J(OneSignalPlugin.java:2)
    at com.onesignal.flutter.OneSignalPlugin.onMethodCall(OneSignalPlugin.java:16)
    at xi.k$a.a(MethodChannel.java:2)
    at ki.c.l(DartMessenger.java:2)
    at ki.c.m(DartMessenger.java:2)
    at ki.c.i
    at ki.b.run
    at android.os.Handler.handleCallback(Handler.java:942)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7898)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
java.lang.ExceptionInInitializerError: null
    at com.onesignal.d3.D1(OneSignal.java:1)
    at com.onesignal.flutter.OneSignalPlugin.J(OneSignalPlugin.java:2)
    at com.onesignal.flutter.OneSignalPlugin.onMethodCall(OneSignalPlugin.java:16)
    at xi.k$a.a(MethodChannel.java:2)
    at ki.c.l(DartMessenger.java:2)
    at ki.c.m(DartMessenger.java:2)
    at ki.c.i
    at ki.b.run
    at android.os.Handler.handleCallback(Handler.java:942)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7898)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
    

Also attaching screens from Sentry Screenshot 2023-01-19 at 2 46 35 PM

Screenshot 2023-01-19 at 2 46 26 PM

esentis avatar Jan 19 '23 12:01 esentis

the same bug is present for the ionic sdk too

marshall86 avatar Mar 14 '23 11:03 marshall86

Updates?

MrNapcae avatar Apr 13 '23 11:04 MrNapcae

Hi, I subscribed to this issue because I had similar issue but on another SDK (react-native). I think I got it working by updating the targetSdkVersion to 33 (which was set to 31) in the build.gradle You could maybe try and see if this works for you too ?

mbody avatar Apr 13 '23 11:04 mbody

Привет, я подписался на эту проблему, потому что у меня была похожая проблема, но с другим SDK (реактивным). Я думаю, что у меня это заработало, обновив targetSdkVersion до 33 (которое было установлено на 31) в build.gradle. Возможно, вы могли бы попробовать и посмотреть, работает ли это и для вас?

buildToolsVersion = "33.0.0" minSdkVersion = 21 compileSdkVersion = 33 targetSdkVersion = 33

the error is still there

MrNapcae avatar Apr 13 '23 11:04 MrNapcae

Has anyone been able to reproduce this issue in their project?

emawby avatar Apr 13 '23 17:04 emawby

Any update on this?

jpacyfik avatar Jul 17 '23 05:07 jpacyfik

Running into this as well. Has anyone been able to get a workaround to work?

tavosansal avatar Jul 17 '23 21:07 tavosansal

same issue here

Ozaoujal avatar Sep 05 '23 16:09 Ozaoujal

Same issue here on Flutter SDK

SamedHrmn avatar Sep 13 '23 17:09 SamedHrmn

Hello everyone! Apologies that this issue has gone stale. Much of our work in the last few quarters have been on a new major release where many improvements and enhancements are introduced. We will continue to investigate 4.x.x bugs, though we encourage you to update to our latest release as that will be the most-supported release going forward. Please see our migration guide for full details on upgrading.

If this crash is still a current concern for anyone, please let us know update reproduction steps and we will investigate further. Thanks!

jennantilla avatar Mar 13 '24 22:03 jennantilla