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

App crashing right after receiving the notification! #592

Closed Gamezpedia closed 6 years ago

Gamezpedia commented 6 years ago

Description:

i am getting notification but it is crashing the app .

Environment 1. What version of the Android SDK are you using?

compileSdkVersion 27 buildToolsVersion '27.0.3' minSdkVersion 19 targetSdkVersion 27

2. How did you add the SDK to your project (eg. maven)

maven

Steps to Reproduce Issue:

Followed the steps written in Android SDK setup guide https://documentation.onesignal.com/docs/android-sdk-setup

07-16 21:27:14.463 6035-6035/com.kyo.app.debug E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.kyo.app.debug, PID: 6035
    java.lang.NoSuchMethodError: No static method zzad()Lcom/google/firebase/iid/zzan; in class Lcom/google/firebase/iid/zzan; or its super classes (declaration of 'com.google.firebase.iid.zzan' appears in /data/app/com.kyo.app.debug-2/split_lib_dependencies_apk.apk)
        at com.google.firebase.messaging.FirebaseMessagingService.zzb(Unknown Source)
        at com.google.firebase.iid.zzb.onStartCommand(Unknown Source)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3067)
        at android.app.ActivityThread.access$2200(ActivityThread.java:154)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1489)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:5526)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

i searched on google it seems like something to do with Firebase messaging version i am not sure though.

jkasten2 commented 6 years ago

@Gamezpedia The java.lang.NoSuchMethodError: No static method xxxx()Lcom/google/firebase/iid/yyyy; errors most of the time mean you have a mismatched set of Firebase versions in your project.

Can you ensure you have added the gradle plugin noted in step 1.1 to the correct build.gradle file and it is at the very top (line: 1) of the file? https://documentation.onesignal.com/docs/android-sdk-setup#section-1-gradle-setup This plugin ensure the a matching set of versions are used in your project

Gamezpedia commented 6 years ago

Yes i copy pasted from the docs:

here is my complete build.gradle file

////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////ONE SIGNAL

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.11.0, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// APP

apply plugin: 'com.android.application'

android {

    compileSdkVersion 27
    buildToolsVersion '27.0.3'
    defaultConfig {
        applicationId "com.kyo.tests"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        manifestPlaceholders = [
                onesignal_app_id: 'aaad82ac-4058-439e-9ffc-27012615e93f',
                // Project number pulled from dashboard, local value is ignored.
                onesignal_google_project_number: 'REMOTE'
        ]
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix '.debug'
            debuggable true
        }
    }

    flavorDimensions "final"
    productFlavors {
        free{
            dimension "final"
            applicationId 'com.kyo.app'
        }
        paid {
            dimension "final"
            applicationId 'com.kyo.app.paid'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    implementation 'com.google.firebase:firebase-core:16.0.1'
    implementation 'com.google.android.gms:play-services-ads:15.0.1'

    implementation 'com.onesignal:OneSignal:[3.9.1, 3.99.99]'
}

apply plugin: 'com.google.gms.google-services'

there are two flavors and each flavor have debug and release variants, along with google-services.json files in each flavor folder.

i can see everything work in the Firebase analytics dashboard that each flavor is showing it's proper RELEASE & DEBUG versions separately and the activity too.

i also tried to pass the app id in init method

OneSignal.getCurrentOrNewInitBuilder()
                .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.None)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .setNotificationReceivedHandler(new OneSignal.NotificationReceivedHandler() {
                    @Override
                    public void notificationReceived(OSNotification notification) {
                        Log.d("MAIN", "notificationReceived: RECVFD");
                    }
                }).init();

OneSignal.init(this,"REMOTE","aaad82ac-4058-439e-9ffc-27012615e93f");

thanks

jkasten2 commented 6 years ago

@Gamezpedia Thanks for all the details! I believe you are running into this issue https://github.com/OneSignal/OneSignal-Gradle-Plugin/issues/53. Adding the following should fix this

implementation 'com.google.firebase:firebase-messaging:17.0.0'

This is due to some breaking changes in com.google.firebase:firebase-core:16.0.0 that cause class missing errors with 15.x versions of firebase-messaging. Updating it to version 17.0.0 fixes this issue. Since the method / class names were different I didn't suspect this was the same issue at first.

Gamezpedia commented 6 years ago

i added that but got this .

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForFreeDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Unexpected inputs: ImmutableJarInput{name=com.google.firebase:firebase-messaging:15.0.2, file=H:\a\f\M\a\build\intermediates\transforms\desugar\free\debug\11.jar, contentTypes=CLASSES, scopes=EXTERNAL_LIBRARIES, status=REMOVED}
    at com.google.common.base.Preconditions.checkState(Preconditions.java:456)
    at com.android.build.gradle.internal.transforms.InstantRunTransform.transform(InstantRunTransform.java:173)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)
    at sun.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 32 more
jkasten2 commented 6 years ago

@Gamezpedia Can you try running Build > Clean Project?

If this does not help can you try disabling instant run as a work around for the time being? https://stackoverflow.com/a/47815223/1244574

WilliamAnputra commented 6 years ago

@jkasten2 i was getting the same error as @Gamezpedia , adding firebase messaging and Build > Clean project worked for me.

Gamezpedia commented 6 years ago

@jkasten2 thanks; i solved it by removing everything related to OneSignal and then added implementation 'com.google.firebase:firebase-messaging:17.0.0' after the syn: again added the OneSignal things and build it. it is working now

ririlya94 commented 6 years ago

Thanks for the solution guys! Was finding whats the problem for days edy

jkasten2 commented 6 years ago

This issue was fixed in the 0.11.1 OneSignal-Gradle-Plugin update so the word around above is no longer needed.