FIREBASE_MESSAGING: onBackgroundMessage not handling notification when app is on Background or Terminated

7,005

When constructing a data notification, the notification payload MUST be blank.

If the notification payload is not empty, then the payload will be sent as a notification instead of a data message.

Share:
7,005
Jeremy Dormevil
Author by

Jeremy Dormevil

Updated on December 20, 2022

Comments

  • Jeremy Dormevil
    Jeremy Dormevil over 1 year

    I'm trying to get my onBackgroundMessage to execute when the app is on Background and a notification has been receive, but it doesn't execute myBackgroundMessageHandler.

    I did everything that was written in the documentation at Optionally handle background messages, but it still doesn't work like i want, When i receive a notification when the app is on Background, What i get is a notification without data (no app icon and no images, only title and body text).Btw it's working well when the app is not onBackground

    Here my code :

    AndroidManifest.xml
    
    <application
            android:name=".Application"
    

    index.js

      message = {
        android: {
            notification: { click_action: 'FLUTTER_NOTIFICATION_CLICK',}
        },
        token: androidNotificationToken,
        data: {
          activityFeedItemId:activityFeedItemId,
          userReceivingNotificationId: userId,
          userActivatingNotificationPhotoUrl: activityFeedItem.userProfileImg,
          notificationType: activityFeedItem.type,
          body : body
        }
      };
    

    buildgradle

    dependencies {
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        implementation 'com.google.firebase:firebase-analytics:17.2.2'
        implementation 'com.android.support:multidex:1.0.3'
        implementation 'com.google.firebase:firebase-messaging:20.1.7'
    }
    
    apply plugin: 'com.google.gms.google-services'
    

    MainActivity.java

    package com.yimerah.ijn_amen;
    import androidx.annotation.NonNull;
    import io.flutter.embedding.android.FlutterActivity;
    import io.flutter.embedding.engine.FlutterEngine;
    import io.flutter.plugins.GeneratedPluginRegistrant;
    
    public class MainActivity extends FlutterActivity {
        @Override
        public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
            GeneratedPluginRegistrant.registerWith(flutterEngine);
        }
    }
    

    Application.java

    package com.yimerah.ijn_amen;
    
    import io.flutter.app.FlutterApplication;
    import io.flutter.plugin.common.PluginRegistry;
    import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
    import io.flutter.plugins.GeneratedPluginRegistrant;
    import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
    import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
    
    public class Application extends FlutterApplication implements PluginRegistrantCallback {
        @Override
        public void onCreate() {
            super.onCreate();
            FlutterFirebaseMessagingService.setPluginRegistrant(this);
        }
    
        @Override
        public void registerWith(PluginRegistry registry) {
            FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        }
    }
    

    OnBackgroundMessage

      onBackgroundMessage: myBackgroundMessageHandler
       static myBackgroundMessageHandler{
        final FirebaseUser firebaseUser = await auth.currentUser();
    
        print("on message:$message\n");
        final String userReceivingId =
            message['data']['userReceivingNotificationId'];
        final String body = message['data']['body'];
        final String notificationType = message['data']['notificationType'];
        final String notificationId = message['data']['activityFeedItemId'];
        if (userReceivingId == firebaseUser.uid) {
          int id = Uuid().parse(notificationId).reduce((a, b) => a + b);
            final String notificationMedia =
                message['data']['userActivatingNotificationPhotoUrl'];
            await showNotificationMediaStyle("", body, notificationMedia, id: id);
    
    
          print("Notification shown!");
        }
        print("Notification not shown!");
      }
    

    Thank you in advance for your help,