OneSignal / OneSignal-Gradle-Plugin

Use with OneSignal-Android-SDK to help integrate it into your Android Studio or Gradle project. https://onesignal.com
Other
64 stars 17 forks source link

'Unknown error getting FCM Token' after upgrading dependencies #93

Closed grahammcculloch closed 5 years ago

grahammcculloch commented 5 years ago

OneSignal push notifications were working fine when I was using React Native v0.55.4. After upgrading React Native to 0.59.8 (and several other NPM dependencies) I now get a runtime error (java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.iid.FirebaseInstanceId.getToken(java.lang.String, java.lang.String)' on a null object reference, see below for stack trace) when trying to initialize OneSignal (calling OneSignal.init(<MY_KEY>); from my app).

Analysing the changes, I noticed one particular change which I think might be significant:

+--- com.onesignal:OneSignal:3.10.8
|    +--- com.google.firebase:firebase-messaging:[10.2.1, 12.1.0) -> 17.3.3

Back when my OneSignal push notifications were working, firebase-messaging would resolve to v12.x

I'm posting in this repo because I see that the onesignal-gradle-plugin has logic to decide which version of firebase to resolve to and I wonder if my particular set of dependencies has exposed an issue with this? Or maybe I'm way off the actual problem!!

Possibly relevant: I also have dependencies on countly-sdk-react-native and appcenter

Project Setup

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven { url "https://jitpack.io" }
        maven { url "https://maven.google.com" }
    }
}

ext {
    minSdkVersion = 16
    compileSdkVersion = 28
    targetSdkVersion = 28
    supportLibVersion = "28.0.0"
    googlePlayServicesVersion = "12.0.1"
}

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 28
                buildToolsVersion '28.0.3'
            }
        }
    }
}

app/build.gradle

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal 
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.2, 0.99.99]'
    }
}

apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

apply plugin: "com.android.application"

import com.android.build.OutputFile

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
apply from: "../../node_modules/react-native-sentry/sentry.gradle"
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"

def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion rootProject.ext.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        applicationId "com.digiserve.adroit"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.4.1"
        ndk {
            abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
        resValue "string", "build_config_package", "com.digiserve.adroit"
        multiDexEnabled true

        // Used by react-native-image-crop-picker
        vectorDrawables.useSupportLibrary = true
    }
    signingConfigs {
        release {
            storeFile rootProject.file("app/adroit.keystore")
            storePassword System.getenv("APPCENTER_KEYSTORE_PASSWORD")
            keyAlias System.getenv("APPCENTER_KEY_ALIAS")
            keyPassword System.getenv("APPCENTER_KEY_PASSWORD")
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    buildTypes {
        debug {
            buildConfigField "String", "CODEPUSH_KEY", '""'
            applicationIdSuffix ".debug"
        }
        releaseStaging {
            buildConfigField "String", "CODEPUSH_KEY", "\"${CODE_PUSH_KEY_ANDROID_STAGING}\""
            signingConfig signingConfigs.release
            matchingFallbacks = ['release']
        }
        release {
            buildConfigField "String", "CODEPUSH_KEY", "\"${CODE_PUSH_KEY_ANDROID_PRODUCTION}\""
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    implementation project(':react-native-onesignal')
    implementation project(':react-native-image-crop-picker')
    implementation project(':react-native-gesture-handler')
    implementation project(':@react-native-community_async-storage')
    implementation project(':react-native-webview')
    implementation project(':react-native-code-push')
    implementation project(':react-native-orientation')
    implementation project(':react-native-splash-screen')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-image-resizer')
    implementation project(':react-native-locale')
    implementation project(':react-native-exif')
    implementation project(':react-native-config')
    implementation project(':appcenter-crashes')
    implementation project(':appcenter-analytics')
    implementation project(':appcenter')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-sentry')
    implementation project(':react-native-keychain')
    implementation project(':react-native-svg')
    implementation project(':react-native-device-info')
    implementation project(':react-native-background-timer')
    implementation project(':react-native-restart')
}

task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

Full Error

E/OneSignal: Unknown error getting FCM Token
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.iid.FirebaseInstanceId.getToken(java.lang.String, java.lang.String)' on a null object reference
        at com.onesignal.PushRegistratorFCM.getToken(PushRegistratorFCM.java:83)
        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:764)

Dependency Tree

(Abbreviated - just the releaseCompileClasspath section. Can provide the whole output if required!)

releaseCompileClasspath - Resolved configuration for compilation for variant: release
+--- project :react-native-onesignal
+--- project :react-native-image-crop-picker
+--- project :react-native-gesture-handler
+--- project :@react-native-community_async-storage
+--- project :react-native-webview
|    \--- com.facebook.react:react-native:+ -> 0.59.8
|         +--- com.facebook.infer.annotation:infer-annotation:0.11.2
|         |    \--- com.google.code.findbugs:jsr305:3.0.1 -> 3.0.2
|         +--- javax.inject:javax.inject:1
|         +--- com.android.support:appcompat-v7:28.0.0
|         |    +--- com.android.support:support-annotations:28.0.0
|         |    +--- com.android.support:support-compat:28.0.0
|         |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    +--- com.android.support:collections:28.0.0
|         |    |    |    \--- com.android.support:support-annotations:28.0.0
|         |    |    +--- android.arch.lifecycle:runtime:1.1.1
|         |    |    |    +--- android.arch.lifecycle:common:1.1.1
|         |    |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
|         |    |    |    +--- android.arch.core:common:1.1.1
|         |    |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
|         |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
|         |    |    \--- com.android.support:versionedparcelable:28.0.0
|         |    |         +--- com.android.support:support-annotations:28.0.0
|         |    |         \--- com.android.support:collections:28.0.0 (*)
|         |    +--- com.android.support:collections:28.0.0 (*)
|         |    +--- com.android.support:cursoradapter:28.0.0
|         |    |    \--- com.android.support:support-annotations:28.0.0
|         |    +--- com.android.support:support-core-utils:28.0.0
|         |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    +--- com.android.support:documentfile:28.0.0
|         |    |    |    \--- com.android.support:support-annotations:28.0.0
|         |    |    +--- com.android.support:loader:28.0.0
|         |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    +--- android.arch.lifecycle:livedata:1.1.1
|         |    |    |    |    +--- android.arch.core:runtime:1.1.1
|         |    |    |    |    |    +--- com.android.support:support-annotations:26.1.0 -> 28.0.0
|         |    |    |    |    |    \--- android.arch.core:common:1.1.1 (*)
|         |    |    |    |    +--- android.arch.lifecycle:livedata-core:1.1.1
|         |    |    |    |    |    +--- android.arch.lifecycle:common:1.1.1 (*)
|         |    |    |    |    |    +--- android.arch.core:common:1.1.1 (*)
|         |    |    |    |    |    \--- android.arch.core:runtime:1.1.1 (*)
|         |    |    |    |    \--- android.arch.core:common:1.1.1 (*)
|         |    |    |    \--- android.arch.lifecycle:viewmodel:1.1.1
|         |    |    |         \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
|         |    |    +--- com.android.support:localbroadcastmanager:28.0.0
|         |    |    |    \--- com.android.support:support-annotations:28.0.0
|         |    |    \--- com.android.support:print:28.0.0
|         |    |         \--- com.android.support:support-annotations:28.0.0
|         |    +--- com.android.support:support-fragment:28.0.0
|         |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    +--- com.android.support:support-core-ui:28.0.0
|         |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    +--- com.android.support:support-core-utils:28.0.0 (*)
|         |    |    |    +--- com.android.support:customview:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    \--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    +--- com.android.support:viewpager:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|         |    |    |    +--- com.android.support:coordinatorlayout:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|         |    |    |    +--- com.android.support:drawerlayout:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|         |    |    |    +--- com.android.support:slidingpanelayout:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|         |    |    |    +--- com.android.support:interpolator:28.0.0
|         |    |    |    |    \--- com.android.support:support-annotations:28.0.0
|         |    |    |    +--- com.android.support:swiperefreshlayout:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    |    \--- com.android.support:interpolator:28.0.0 (*)
|         |    |    |    +--- com.android.support:asynclayoutinflater:28.0.0
|         |    |    |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    |    |    \--- com.android.support:support-compat:28.0.0 (*)
|         |    |    |    \--- com.android.support:cursoradapter:28.0.0 (*)
|         |    |    +--- com.android.support:support-core-utils:28.0.0 (*)
|         |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    +--- com.android.support:loader:28.0.0 (*)
|         |    |    \--- android.arch.lifecycle:viewmodel:1.1.1 (*)
|         |    +--- com.android.support:support-vector-drawable:28.0.0
|         |    |    +--- com.android.support:support-annotations:28.0.0
|         |    |    \--- com.android.support:support-compat:28.0.0 (*)
|         |    \--- com.android.support:animated-vector-drawable:28.0.0
|         |         +--- com.android.support:support-vector-drawable:28.0.0 (*)
|         |         \--- com.android.support:support-core-ui:28.0.0 (*)
|         +--- com.facebook.fresco:fresco:1.10.0
|         |    +--- com.facebook.fresco:fbcore:1.10.0
|         |    +--- com.facebook.fresco:drawee:1.10.0
|         |    |    +--- com.facebook.fresco:fbcore:1.10.0
|         |    |    \--- com.facebook.fresco:imagepipeline:1.10.0
|         |    |         +--- com.facebook.fresco:imagepipeline-base:1.10.0
|         |    |         |    +--- com.facebook.soloader:soloader:0.5.0 -> 0.6.0
|         |    |         |    +--- com.parse.bolts:bolts-tasks:1.4.0
|         |    |         |    \--- com.facebook.fresco:fbcore:1.10.0
|         |    |         +--- com.facebook.soloader:soloader:0.5.0 -> 0.6.0
|         |    |         +--- com.parse.bolts:bolts-tasks:1.4.0
|         |    |         \--- com.facebook.fresco:fbcore:1.10.0
|         |    +--- com.facebook.fresco:imagepipeline:1.10.0 (*)
|         |    \--- com.facebook.soloader:soloader:0.5.0 -> 0.6.0
|         +--- com.facebook.fresco:imagepipeline-okhttp3:1.10.0
|         |    +--- com.squareup.okhttp3:okhttp:3.10.0 -> 3.12.1
|         |    |    \--- com.squareup.okio:okio:1.15.0
|         |    +--- com.facebook.fresco:fbcore:1.10.0
|         |    \--- com.facebook.fresco:imagepipeline:1.10.0 (*)
|         +--- com.facebook.soloader:soloader:0.6.0
|         +--- com.google.code.findbugs:jsr305:3.0.2
|         +--- com.squareup.okhttp3:okhttp:3.12.1 (*)
|         +--- com.squareup.okhttp3:okhttp-urlconnection:3.12.1
|         |    \--- com.squareup.okhttp3:okhttp:3.12.1 (*)
|         \--- com.squareup.okio:okio:1.15.0
+--- project :react-native-code-push
+--- project :react-native-orientation
|    \--- com.facebook.react:react-native:+ -> 0.59.8 (*)
+--- project :react-native-splash-screen
+--- project :react-native-vector-icons
+--- project :react-native-image-resizer
+--- project :react-native-locale
|    \--- com.facebook.react:react-native:0.17.+ -> 0.59.8 (*)
+--- project :react-native-exif
|    +--- com.android.support:appcompat-v7:23.0.1 -> 28.0.0 (*)
|    \--- com.facebook.react:react-native:+ -> 0.59.8 (*)
+--- project :react-native-config
+--- project :appcenter-crashes
|    +--- com.microsoft.appcenter:appcenter-crashes:1.11.4
|    |    \--- com.microsoft.appcenter:appcenter:1.11.4
|    \--- com.microsoft.appcenter.reactnative:appcenter-react-native:1.13.0
|         \--- com.microsoft.appcenter:appcenter:1.11.4
+--- project :appcenter-analytics
|    +--- com.microsoft.appcenter:appcenter-analytics:1.11.4
|    |    \--- com.microsoft.appcenter:appcenter:1.11.4
|    \--- com.microsoft.appcenter.reactnative:appcenter-react-native:1.13.0 (*)
+--- project :appcenter
|    +--- com.microsoft.appcenter:appcenter:1.11.4
|    \--- com.microsoft.appcenter.reactnative:appcenter-react-native:1.13.0 (*)
+--- com.android.support:appcompat-v7:28.0.0 (*)
+--- com.facebook.react:react-native:+ -> 0.59.8 (*)
+--- project :react-native-linear-gradient
+--- project :react-native-sentry
+--- project :react-native-keychain
+--- project :react-native-svg
+--- project :react-native-device-info
|    +--- com.facebook.react:react-native:+ -> 0.59.8 (*)
|    \--- com.google.android.gms:play-services-gcm:+ -> 16.1.0
|         +--- com.google.android.gms:play-services-base:16.0.1
|         |    +--- com.google.android.gms:play-services-basement:16.0.1
|         |    |    \--- com.android.support:support-v4:26.1.0 -> 28.0.0
|         |    |         +--- com.android.support:support-compat:28.0.0 (*)
|         |    |         +--- com.android.support:support-media-compat:28.0.0
|         |    |         |    +--- com.android.support:support-annotations:28.0.0
|         |    |         |    +--- com.android.support:support-compat:28.0.0 (*)
|         |    |         |    \--- com.android.support:versionedparcelable:28.0.0 (*)
|         |    |         +--- com.android.support:support-core-utils:28.0.0 (*)
|         |    |         +--- com.android.support:support-core-ui:28.0.0 (*)
|         |    |         \--- com.android.support:support-fragment:28.0.0 (*)
|         |    \--- com.google.android.gms:play-services-tasks:16.0.1
|         |         \--- com.google.android.gms:play-services-basement:16.0.1 (*)
|         +--- com.google.android.gms:play-services-basement:16.0.1 (*)
|         +--- com.google.android.gms:play-services-iid:[16.0.1] -> 16.0.1
|         |    +--- com.google.android.gms:play-services-base:16.0.1 (*)
|         |    +--- com.google.android.gms:play-services-basement:16.0.1 (*)
|         |    +--- com.google.android.gms:play-services-stats:16.0.1
|         |    |    \--- com.google.android.gms:play-services-basement:16.0.1 (*)
|         |    \--- com.google.android.gms:play-services-tasks:16.0.1 (*)
|         \--- com.google.android.gms:play-services-stats:16.0.1 (*)
+--- project :react-native-background-timer
+--- project :react-native-restart
|    \--- com.facebook.react:react-native:+ -> 0.59.8 (*)
+--- com.android.support:multidex:1.0.2
+--- com.facebook.react:react-native:0.59.8 (*)
+--- com.facebook.infer.annotation:infer-annotation:0.11.2 (*)
+--- com.google.code.findbugs:jsr305:3.0.2
+--- javax.inject:javax.inject:1
+--- com.android.support:appcompat-v7:28.0.0 (*)
+--- com.android.support:support-annotations:28.0.0
+--- com.android.support:support-compat:28.0.0 (*)
+--- com.android.support:collections:28.0.0 (*)
+--- android.arch.lifecycle:runtime:1.1.1 (*)
+--- android.arch.lifecycle:common:1.1.1 (*)
+--- android.arch.core:common:1.1.1 (*)
+--- com.android.support:versionedparcelable:28.0.0 (*)
+--- com.android.support:cursoradapter:28.0.0 (*)
+--- com.android.support:support-core-utils:28.0.0 (*)
+--- com.android.support:documentfile:28.0.0 (*)
+--- com.android.support:loader:28.0.0 (*)
+--- android.arch.lifecycle:livedata:1.1.1 (*)
+--- android.arch.core:runtime:1.1.1 (*)
+--- android.arch.lifecycle:livedata-core:1.1.1 (*)
+--- android.arch.lifecycle:viewmodel:1.1.1 (*)
+--- com.android.support:localbroadcastmanager:28.0.0 (*)
+--- com.android.support:print:28.0.0 (*)
+--- com.android.support:support-fragment:28.0.0 (*)
+--- com.android.support:support-core-ui:28.0.0 (*)
+--- com.android.support:customview:28.0.0 (*)
+--- com.android.support:viewpager:28.0.0 (*)
+--- com.android.support:coordinatorlayout:28.0.0 (*)
+--- com.android.support:drawerlayout:28.0.0 (*)
+--- com.android.support:slidingpanelayout:28.0.0 (*)
+--- com.android.support:interpolator:28.0.0 (*)
+--- com.android.support:swiperefreshlayout:28.0.0 (*)
+--- com.android.support:asynclayoutinflater:28.0.0 (*)
+--- com.android.support:support-vector-drawable:28.0.0 (*)
+--- com.android.support:animated-vector-drawable:28.0.0 (*)
+--- com.facebook.fresco:fresco:1.10.0 (*)
+--- com.facebook.fresco:fbcore:1.10.0
+--- com.facebook.fresco:drawee:1.10.0 (*)
+--- com.facebook.fresco:imagepipeline:1.10.0 (*)
+--- com.facebook.fresco:imagepipeline-base:1.10.0 (*)
+--- com.facebook.soloader:soloader:0.6.0
+--- com.parse.bolts:bolts-tasks:1.4.0
+--- com.facebook.fresco:imagepipeline-okhttp3:1.10.0 (*)
+--- com.squareup.okhttp3:okhttp:3.12.1 (*)
+--- com.squareup.okio:okio:1.15.0
+--- com.squareup.okhttp3:okhttp-urlconnection:3.12.1 (*)
+--- com.google.android.gms:play-services-basement:16.0.1 (*)
+--- com.android.support:support-v4:28.0.0 (*)
+--- com.android.support:support-media-compat:28.0.0 (*)
+--- com.google.android.gms:play-services-tasks:16.0.1 (*)
+--- com.google.android.gms:play-services-stats:16.0.1 (*)
+--- com.google.android.gms:play-services-base:16.0.1 (*)
+--- com.microsoft.appcenter:appcenter-crashes:1.11.4 (*)
+--- com.microsoft.appcenter:appcenter:1.11.4
+--- com.microsoft.appcenter.reactnative:appcenter-react-native:1.13.0 (*)
+--- com.microsoft.appcenter:appcenter-analytics:1.11.4 (*)
+--- com.google.android.gms:play-services-gcm:16.1.0 (*)
+--- com.google.android.gms:play-services-iid:16.0.1 (*)
\--- com.android.support:multidex:1.0.2
jkasten2 commented 5 years ago

@grahammcculloch I believe this is fixed in the 0.12.2 release https://github.com/OneSignal/OneSignal-Gradle-Plugin/releases/tag/0.12.2

If you are still seeing the issue please feel free to reopen this issue. Thanks.