FCM : onMessageReceived is not called,notification didn't came even after sending msg to fcm?

12,662

Solution 1

You are not following the proper code. Check this link again.

Solution

Use below code

<action android:name="com.google.firebase.MESSAGING_EVENT" />

instead of

<action android:name="com.google.firebase.MESSAGE_EVENT"/>

Solution 2

Common mistake

android:name="YourApplicationPackageName.YourFirebaseMessagingServiceName"

You need to change some portion AndroidManifest.xml.

Your code:

 <service
        android:name=".FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGE_EVENT"/>
        </intent-filter>
    </service>
    <service
        android:name=".FirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

Replace with following code:

<service
            android:name="com.example.noticeboard.FirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGE_EVENT"/>
            </intent-filter>
        </service>
        <service
            android:name="com.example.noticeboard.FirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>

Solution 3

Unfortunately, Usman Iqbal 's answer is not completely correct. The official Android docs use MESSAGING_EVENT:

 <service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

Source: https://firebase.google.com/docs/cloud-messaging/android/receive#edit-the-app-manifest

Share:
12,662
Tejasv Kulshrestha
Author by

Tejasv Kulshrestha

Updated on July 26, 2022

Comments

  • Tejasv Kulshrestha
    Tejasv Kulshrestha over 1 year

    i am developing an app where i want to implement FCM push notifications through php.

    So i made two java files: 1.FirebaseInstanceID (Working fine and getting token properly in database) 2.FirebaseMessagingSerivice (Not Called)

    My FirebaseMessagingService.java

    package com.example.xyz;
    
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.support.v4.app.NotificationCompat;
    import com.google.firebase.messaging.RemoteMessage;
    
    public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService{
    
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    
        showNotification(remoteMessage.getData().get("message"));
    }
    
    private void showNotification(String message) {
    
        Intent i = new Intent(this,Dashboard.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
    
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setAutoCancel(true)
                .setContentTitle("FCM Test")
                .setContentText(message)
                .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
                .setContentIntent(pendingIntent);
    
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    
        manager.notify(0,builder.build());
    }
    }
    

    My result when i run my php script to send message to FCM:

     {\"multicast_id\":7077449602201888040,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1465110073498648%d215149df9fd7ecd\"}]}
    

    But still i don't get any notification and all the configurations like api key,package name (in fcm console,my project) are checked and they are fine.

    When i debug the app by creating breakpoint at onMessageReceived() in FirebaseMessagingService.java, it doesn't go through that and app runs normally when message is pushed through php script to fcm server.

    My Dashboard.java

    public class Dashboard extends AppCompatActivity {
    
    private Toolbar toolbar;
    private DrawerLayout drawer_layout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
    
        toolbar=(Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    
        drawer_layout=(DrawerLayout) findViewById(R.id.drawer_layout);
        NavigationDrawerFragment drawerfragment= (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerfragment.setUp(R.id.fragment_navigation_drawer,drawer_layout,toolbar);
    
    
        FirebaseMessaging.getInstance().subscribeToTopic("test");
        FirebaseInstanceId.getInstance().getToken();
    
    }
    

    But My dashboard activity contains a fragment over it.I don't that whether it may be a problem.

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.noticeboard"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="23" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Dashboard"
        android:label="@string/title_activity_dashboard" >
    </activity>
    <activity
        android:name=".SplashScreen"
        android:label="@string/title_activity_splash_screen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Login"
        android:label="@string/title_activity_login" >
    </activity>
    <activity
        android:name=".NoticeViewer"
        android:label="@string/title_activity_notice_viewer" >
    </activity>
    <service
        android:name=".FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGE_EVENT"/>
        </intent-filter>
    </service>
    <service
        android:name=".FirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    </application>
    </manifest>
    

    LOGCAT

    06-05 12:06:05.678 32386-32386/com.example.noticeboard W/ActivityThread: Application com.example.noticeboard is waiting for the debugger on port 8100...
    06-05 12:06:05.686 32386-32386/com.example.noticeboard I/System.out: Sending WAIT chunk
    06-05 12:06:05.892 32386-32393/com.example.noticeboard I/art: Debugger is active
    06-05 12:06:05.897 32386-32386/com.example.noticeboard I/System.out: Debugger has connected
    06-05 12:06:05.897 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:06.107 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:06.317 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:06.527 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:06.587 32386-32393/com.example.noticeboard W/art: Suspending all threads took: 41.152ms
    06-05 12:06:06.741 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:06.947 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:07.157 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:07.368 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:07.577 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:07.786 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:07.998 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 
    06-05 12:06:08.208 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:08.418 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle...
    06-05 12:06:08.628 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 
    06-05 12:06:08.838 32386-32386/com.example.noticeboard I/System.out: debugger has settled (1466)
    06-05 12:06:08.884 32386-32386/com.example.noticeboard W/System: ClassLoader referenced unknown path: /data/app/com.example.noticeboard-1/lib/x86
    06-05 12:06:08.906 32386-32386/com.example.noticeboard D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
    06-05 12:06:08.918 32386-32386/com.example.noticeboard D/FirebaseApp: Initialized class com.google.firebase.iid.FirebaseInstanceId.
    06-05 12:06:08.919 32386-32386/com.example.noticeboard D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
    06-05 12:06:08.943 32386-32386/com.example.noticeboard I/FA: App measurement is starting up, version: 9080
    06-05 12:06:08.943 32386-32386/com.example.noticeboard I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
    06-05 12:06:09.022 32386-32386/com.example.noticeboard D/FirebaseApp: Initialized class com.google.android.gms.measurement.AppMeasurement.
    06-05 12:06:09.022 32386-32386/com.example.noticeboard I/FirebaseInitProvider: FirebaseApp initialization successful
    06-05 12:06:09.045 32386-32456/com.example.noticeboard W/GooglePlayServicesUtil: Google Play services out of date.  Requires 9080000 but found 8087470
    06-05 12:06:09.130 32386-32457/com.example.noticeboard D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
    
    06-05 12:06:09.134 32386:32386 D/         ]
                                                                         HostConnection::get() New Host Connection established 0xabe6ce00, tid 32386
    06-05 12:06:09.141 32386-32386/com.example.noticeboard W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null}
    
    [ 06-05    12:06:09.188 32386:32457 D/         ]
                                                             HostConnection::get() New Host Connection established 0xabe6cff0, tid 32457
    06-05 12:06:09.193 32386-32457/com.example.noticeboard I/OpenGLRenderer: Initialized EGL, version 1.4
    06-05 12:06:09.215 32386-32457/com.example.noticeboard W/EGL_emulation: eglSurfaceAttrib not implemented
    06-05 12:06:09.215 32386-32457/com.example.noticeboard W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa3e6ca80, error=EGL_SUCCESS
    06-05 12:06:17.473 32386-32394/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run()
    06-05 12:06:17.474 32386-32395/com.example.noticeboard W/art: Method processed more than once: void java.lang.Object.wait(long)
    06-05 12:06:17.474 32386-32395/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run()
    06-05 12:06:17.478 32386-32396/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run()
    06-05 12:06:32.514 32386-32457/com.example.noticeboard W/EGL_emulation: eglSurfaceAttrib not implemented
    06-05 12:06:32.514 32386-32457/com.example.noticeboard W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa24ff280, error=EGL_SUCCESS
    06-05 12:06:32.624 32386-32457/com.example.noticeboard E/Surface: getSlotFromBufferLocked: unknown buffer: 0xabee3340
    06-05 12:06:32.656 32386-332/com.example.noticeboard D/FirebaseInstanceId: topic sync succeeded
    

    Thanks in Advance!

  • Tejasv Kulshrestha
    Tejasv Kulshrestha almost 8 years
    Recently few hours before i solved the problem and the problem is in Manifest file. I just changed "com.google.firebase.MESSAGE_EVENT" to "com.google.firebase.MESSAGING_EVENT"..that solved my problem..by the way thanks for your effort!
  • Usman lqbal
    Usman lqbal almost 8 years
    i had a same one and above mention(answer) works for me .
  • Usman lqbal
    Usman lqbal almost 8 years
    what you have changed ?
  • Tejasv Kulshrestha
    Tejasv Kulshrestha almost 8 years
    i just mentioned in comment that i changed "com.google.firebase.MESSAGE_EVENT" to "com.google.firebase.MESSAGING_EVENT"..and problem solved!