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
605 stars 368 forks source link

FirebaseMessaging.getToken() on a null object reference #1406

Closed ersincoskun closed 2 years ago

ersincoskun commented 3 years ago

Description: I imported libs and initialized onesignal then I got "FirebaseMessaging.getToken() on a null object reference" error. I'm doing everything should i do , like description on onesignal documantation.

Environment:

Android Studio Arctic Fox | 2020.3.1

My imports:

build gradle:Project :

buildscript {
    ext.kotlin_version = "1.5.10"
    repositories {
        google()
        jcenter()
        gradlePluginPortal()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.9'
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.10, 0.99.99]'

        def nav_version = "2.3.4"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files}
    }
    allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()

        maven { url 'https://jitpack.io' } 
    }
    }
    task clean(type: Delete) {
    delete rootProject.buildDir
    }

My application class:

class MyApplicationClass : Application(),Configuration.Provider {
private val ONESIGNAL_APP_ID = "18fbcaa2-cea2-4af4-b000-f48d4a379339"

    override fun onCreate() {
        super.onCreate()

        // Enable verbose OneSignal logging to debug issues if needed.
        OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.NONE)

        // OneSignal Initialization
        OneSignal.initWithContext(this)
        OneSignal.setAppId(ONESIGNAL_APP_ID)
    }

    override fun getWorkManagerConfiguration() =
        Configuration.Builder()
            .setMinimumLoggingLevel(android.util.Log.INFO)
            .build()
            }

Manifest application:

<application
        android:name=".MyApplicationClass"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="Focused Pupa"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.FocusApp"
        android:usesCleartextTraffic="true"
        tools:node="replace">

Stacktrace:

First Error:

E/OneSignal: Unknown error getting FCM Token
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.messaging.FirebaseMessaging.getToken()' on a null object reference
        at com.onesignal.PushRegistratorFCM.getTokenWithClassFirebaseMessaging(PushRegistratorFCM.java:120)
        at com.onesignal.PushRegistratorFCM.getToken(PushRegistratorFCM.java:70)
        at com.onesignal.PushRegistratorAbstractGoogle.attemptRegistration(PushRegistratorAbstractGoogle.java:97)
        at com.onesignal.PushRegistratorAbstractGoogle.access$100(PushRegistratorAbstractGoogle.java:37)
        at com.onesignal.PushRegistratorAbstractGoogle$1.run(PushRegistratorAbstractGoogle.java:84)
        at java.lang.Thread.run(Thread.java:923)

Second Error:

E/WM-SystemJobScheduler: Unable to schedule {WorkSpec: 84c8e4ac-cb9b-4750-8868-e65c1f6d208c}
    java.lang.IllegalArgumentException: No such service ComponentInfo{com.ersincoskun.focusapp/androidx.work.impl.background.systemjob.SystemJobService}
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2377)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.os.Parcel.readException(Parcel.java:2282)
        at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:308)
        at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:47)
        at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:186)
        at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:132)
        at androidx.work.impl.Schedulers.schedule(Schedulers.java:108)
        at androidx.work.impl.utils.EnqueueRunnable.scheduleWorkInBackground(EnqueueRunnable.java:134)
        at androidx.work.impl.utils.EnqueueRunnable.run(EnqueueRunnable.java:95)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
jkasten2 commented 3 years ago

@ersincoskun

First Error: This errors seems like something went wrong with the Firebase initialization. Is there any other Firebase errors or warnings before this one in the logcat?

Second Error: I see you have getWorkManagerConfiguration in your Application class so you have customized the AndroidX work manager. Can you double check you have correctly confirmed this based on Google's instructions? https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration

ersincoskun commented 3 years ago

there is no other Firebase error , there is just this warning above the error I/OneSignal: FirebaseMessaging.getToken not found, attempting to use FirebaseInstanceId.getToken and sometimes the error is changing with this

E/OneSignal: Unknown error getting FCM Token
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
        at com.onesignal.PushRegistratorFCM.getTokenWithClassFirebaseInstanceId(PushRegistratorFCM.java:97)
        at com.onesignal.PushRegistratorFCM.getToken(PushRegistratorFCM.java:80)
        at com.onesignal.PushRegistratorAbstractGoogle.attemptRegistration(PushRegistratorAbstractGoogle.java:97)
        at com.onesignal.PushRegistratorAbstractGoogle.access$100(PushRegistratorAbstractGoogle.java:37)
        at com.onesignal.PushRegistratorAbstractGoogle$1.run(PushRegistratorAbstractGoogle.java:84)
        at java.lang.Thread.run(Thread.java:923)

i use getWorkManagerConfiguration because when i don't use getWorkManagerConfiguration i get this error

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ersincoskun.focusapp, PID: 8702
    java.lang.RuntimeException: Unable to resume activity {com.ersincoskun.focusapp/com.ersincoskun.focusapp.view.activities.SplashScreen}: java.lang.IllegalStateException: WorkManager is not initialized properly.  You have explicitly disabled WorkManagerInitializer in your manifest, have not manually called WorkManager#initialize at this point, and your Application does not implement Configuration.Provider.
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4444)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
        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:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.IllegalStateException: WorkManager is not initialized properly.  You have explicitly disabled WorkManagerInitializer in your manifest, have not manually called WorkManager#initialize at this point, and your Application does not implement Configuration.Provider.
        at androidx.work.impl.WorkManagerImpl.getInstance(WorkManagerImpl.java:156)
        at androidx.work.WorkManager.getInstance(WorkManager.java:184)
        at com.onesignal.OSNotificationRestoreWorkManager.beginEnqueueingWork(OSNotificationRestoreWorkManager.java:48)
        at com.onesignal.OneSignal.onAppFocusLogic(OneSignal.java:1365)
        at com.onesignal.OneSignal.onAppFocus(OneSignal.java:1350)
        at com.onesignal.ActivityLifecycleHandler.handleFocus(ActivityLifecycleHandler.java:182)
        at com.onesignal.ActivityLifecycleHandler.onActivityResumed(ActivityLifecycleHandler.java:88)
        at com.onesignal.ActivityLifecycleListener.onActivityResumed(ActivityLifecycleListener.java:91)
        at android.app.Application.dispatchActivityResumed(Application.java:436)
        at android.app.Activity.dispatchActivityResumed(Activity.java:1379)
        at android.app.Activity.onResume(Activity.java:1905)
        at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:455)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1456)
        at android.app.Activity.performResume(Activity.java:8135)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4434)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476) 
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 
        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:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
ersincoskun commented 3 years ago

i checked , i guess i use correctly custom workmanager configuration. I don't understand why i have to use this , i tried onesignal on an empty project and it work without custom workmanager configuration but on my project i get the above error

nan-li commented 2 years ago

Hi @ersincoskun, sorry it has been a while. I am checking in if this is still a problem for you?

ersincoskun commented 2 years ago

Hi @nan-li, i have solved the problem by downgrade the gradle version and some of library versions. Thx for asking

nan-li commented 2 years ago

@ersincoskun I'm glad to hear it is resolved, I will close this issue then.