skip to Main Content

my on MessageRecieved method never gets fired in my Android app although the service is running and the manifest seems to be fine. We are sending messages through the firebase console and nothing ever seems to happen. Also the onToken refresh method is only ever called once and that is when you first install the application. After that, it is never called. I have tested the app in the foreground and background and still the onMessageRecieve method is not called.

Here is my manifest

        <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.beatrice.mylocalbartender">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:node="replace"
            tools:replace="android:supportsRtl">

            <!-- meta data to connect ot the facebook api -->

            <service
                android:enabled="true"
                android:exported="true"
                android:name=".messaging.MyFirebaseInstanceIdService">
                <intent-filter>
                    <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
                </intent-filter>
            </service>

            <service
                android:enabled="true"
                android:exported="true"
                android:name=".messaging.MyFirebaseMessagingService">
                <intent-filter>
                    <action android:name="com.google.firebase.MESSAGING_
    EVENT"/>
                </intent-filter>
            </service>


            <meta-data
                android:name="com.google.firebase.messaging.default_notification_icon"
                android:resource="@drawable/bt_ic_android_pay" />
            <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
                 notification message.  for more. -->
            <meta-data
                android:name="com.google.firebase.messaging.default_notification_color"
                android:resource="@color/colorAccent" />


            <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
            <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true"/>
            <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />




            <uses-permission android:name="android.permission.INTERNET" />

            <activity android:name=".messaging.MainActivity"></activity>
            <activity android:name=".activity.GmailSignInActivity">

            </activity>

            <activity android:name=".activity.MainActivity">

                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>

            </activity>

            <!-- activity for brain tree, please do not touch -->
            <activity
                android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"
                android:launchMode="singleTask">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />

                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />

                    <data android:scheme="${applicationId}.braintree" />
                </intent-filter>
            </activity>

            <!-- This activity will be removed in the future -->

            <activity
                android:name=".activity.FacebookLogInActivity"
                android:label="@string/title_activity_facebook_log_in"
                android:theme="@style/AppTheme.NoActionBar">

            </activity>


            <!-- to launch facebook activity - please do not touch -->

            <activity android:name="com.facebook.FacebookActivity"
                android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:label="@string/app_name" />

            <activity enter code hereandroid:name="com.braintreepayments.api.dropin.DropInActivity"></activity>
            <activity android:name="com.braintreepayments.api.dropin.AddCardActivity"></activity>



        </application>

    </manifest>

As you can see the services are enabled and exported.
Here are the services

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";
    private static final String FRIENDLY_ENGAGE_TOPIC = "friendly_engage";

    /**
     * The Application's current Instance ID token is no longer valid
     * and thus a new one must be requested.
     */

    public MyFirebaseInstanceIdService(){
        super();
        Log.d("startedServiceNoLie","hiiiiiiiiiiiiiiiiiiiii");
    }


    @Override
    public void onTokenRefresh() {
        // If you need to handle the generation of a token, initially or
        // after a refresh this is where you should do that.
        String token = FirebaseInstanceId.getInstance().getToken();

        Log.d(TAG, "FCM Token: " + token);
    }
}

And this is the FirebaseMessagingService

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFMService";

    public MyFirebaseMessagingService() {
        super();
        Log.d("startedMessageRecieved","messagingService");

    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // Handle data payload of FCM messages.
        Log.d("messageRecieved", "FCM Message Id: " + remoteMessage.getMessageId());
        Log.d("messageRecieved", "FCM Notification Message: " +
                remoteMessage.getNotification());
        Log.d("messageRecieved", "FCM Data Message: " + remoteMessage.getData());
    }
}

And this is the activity from where is both services are being called from

    public class MainActivity extends AppCompatActivity {

    Button launch_msg_app;
   // private static DatabaseReference root = FirebaseDatabase.getInstance().getReference();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        FirebaseApp.initializeApp(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deletethislayout);

        Intent intent = new Intent(this, MyFirebaseInstanceIdService.class);

        Log.d("tokenNotRefresh",FirebaseInstanceId.getInstance().getToken());
        startService(intent);


        startService(new Intent(this, MyFirebaseMessagingService.class));

        //startService(new Intent(this, DeleteService.class));
    }

Here is my project . gradle

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.google.gms:google-services:3.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        mavenLocal()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Here is my app .gradle

    apply plugin: 'com.android.application'

    repositories {
        mavenLocal()
        flatDir {
            dirs 'libs'
        }
    }
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            applicationId "com.example.beatrice.mylocalbartender"
            minSdkVersion 16
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }


    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.google.android.gms:play-services:10.2.0'

        compile 'com.android.support:design:25.0.0'
        compile 'com.github.bumptech.glide:glide:3.6.1'
        compile 'de.hdodenhof:circleimageview:1.3.0'
        compile 'com.android.support:appcompat-v7:25.0.0'

        // Google
        compile 'com.google.android.gms:play-services-auth:10.2.0'

        // Firebase
        compile 'com.google.firebase:firebase-core:10.2.0'
        compile 'com.google.firebase:firebase-messaging:10.2.0'
        compile 'com.google.firebase:firebase-database:10.0.0'
        compile 'com.google.firebase:firebase-auth:10.0.0'
        compile 'com.google.firebase:firebase-config:10.0.0'
        compile 'com.google.android.gms:play-services-appinvite:10.2.0'
        compile 'com.google.android.gms:play-services-ads:10.2.0'
        compile 'com.google.firebase:firebase-crash:10.0.0'
        compile 'com.google.firebase:firebase-appindexing:10.0.0'

        // Payments
        compile 'com.firebaseui:firebase-ui-database:0.4.0'
        compile 'com.braintreepayments.api:drop-in:3.+'
        compile 'com.loopj.android:android-async-http:1.4.9'
        compile 'com.google.android.gms:play-services-auth:10.2.0'
        compile 'com.facebook.android:facebook-android-sdk:4.+'
        compile 'com.google.android.gms:play-services-wallet:10.2.0'
        compile 'com.firebase:geofire-android:2.1.1'

    }

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

This is driving us crazy and I do not know why it does not receive a message. Again we are sending messages from the firebase notification console. We have a sent a message to the whole application and it still does nothing. Please help us. Thank you so much.

5

Answers


  1. As I can’t comment yet:

    I’m not pretty sure what “android-enabled” and “android-exported” tags mean and do in your service declaration in the manifest. Anyway it works for me even without these tags.

    My MessagingService looks a little bit different:

    The constructor is empty (not even calling super(…)).
    But I call

    super.onMessageReceived(remoteMessage);
    

    in my onMessageReceived method.

    Try to add it to your onMessageReceived method 🙂

    Edit:
    I use only 2 Permissions which are required to override the “do not disturb”-mode and to start a service when the device boot was completed.

    My manifest looks like this (just FCM part):

    <application>
    <service android:name=".MyAppFirebaseService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
    </service>
    <service android:name=".MyApp_FirebaseInstanceIdService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
    </service>
    

    My service looks like this:

    public class MyAppFirebaseService extends FirebaseMessagingService {
    
        public MyAppFirebaseService() {
    
        }
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // ...
            super.onMessageReceived(remoteMessage);
            String title = "Title";
            String message = "Message";
    
    
            // Check if message contains a data payload.
            if (remoteMessage.getData().size() > 0) {
                title = remoteMessage.getData().get("title");
                message = remoteMessage.getData().get("body");
            }
    
            // Check if message contains a notification payload.
            if (remoteMessage.getNotification() != null) {
                title = remoteMessage.getNotification().getTitle();
                message = remoteMessage.getNotification().getBody();
            }
            //My method to display (create) the notification
            //Basically contains a notification(compat)builder
            displayNotifcation(title, message);
    
        }
    }
    

    Too see how the notification builder works just read this documentation:
    Android Developer Notification.Builder

    Login or Signup to reply.
  2. When sending a message you have to use some named channel, and your app should be subscribed on this channel using subscribeOnTopic(“tome_topic”).

    In example, for channel “news”, you will send messages to “/topics/news” channel, and your app have to be subscribed on this channel in order to receive messages:

    FirebaseMessaging.getInstance().subscribeOnTopic("news");
    

    Just add this into your onTokenRefresh() callback or call where you want.

    If you don’t want to receive messages from “news” channel, use
    FirebaseMessaging.getInstance().unsubscribeFromTopic(“news”);

    Note, that when sending from your app server, you should use “/topics/news” for channel name, but in your app you use only “news”.

    And regarding to only one call of onTokenRefresh() – its ok that it isn’t called each restart of app. The firebase client library stores token between restarts and does refresh only when it’s needed.

    Login or Signup to reply.
  3. Try to remove Firebase.initializeApp(this) from onCreate
    . It’s unneeded and may be the issue

    Login or Signup to reply.
  4. Remove tools:node=”replace” from your manifest file.

    Login or Signup to reply.
  5. I struggled with same issue 5days, code everything fine but firebase registrationnid not generating Notifications iam not receiving from firbase console, Finally i got solution
    
       <application
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:supportsRtl="true"
                android:theme="@style/AppTheme"
                tools:node="replace"
                tools:replace="android:supportsRtl">
    
    Everything happend because of this Line inside Application tag      tools:node="replace"
    Please remove this line it will work Perfectly sorry for my english.
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search