Flutter notification is blank when app is in background

5,844

For all those that may have lost days like me to this issue. The notification I was sending had a parent 'notification' object when it should have been 'data' object.

From this answer here: https://stackoverflow.com/a/52116944/1295611

As pointed out by @boformer this only applies for 'Notification' messages. If you're sending 'Data' messages, no notification is created and the messages are delivered only through onMessage. More details in the plugin readme and firebase docs.

That's why onMessage was behaving as expected using my code for creating the notification but onResume was using the default notification.

Share:
5,844
Jimmy Casey
Author by

Jimmy Casey

Updated on December 10, 2022

Comments

  • Jimmy Casey
    Jimmy Casey over 1 year

    When app is in background, onResume is not called but I get some kind of default notification in tray with blank icon and no image.

    When I click this notification, onResume is then called and app is opened but does not navigate to the correct route.

    Firebase message is behaving as expected when flutter app is in foreground. - onMessage is called and notification has icon and image in tray.

    I'm wondering if the setup for notification/messaging is in the wrong location.

      class NotificationIcon extends StatefulWidget {
      @override
      NotificationIconState createState() => NotificationIconState();
    }
    
    class NotificationIconState extends State<NotificationIcon> {
      FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
    
      void fcmSubscribe() {
        ...
      }
    
      void fcmUnSubscribe() {
       ...
      }
    
      Future showBigPictureNotification(Map<String, dynamic> message) async {
        ...
        var bigPictureStyleInformation = new BigPictureStyleInformation(
            bigPicturePath, BitmapSource.FilePath,
            contentTitle: title, summaryText: messageText);
        var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
            '', topic, messageText,
            style: AndroidNotificationStyle.BigPicture,
            styleInformation: bigPictureStyleInformation);
        var platformChannelSpecifics =
            new NotificationDetails(androidPlatformChannelSpecifics, null);
        await flutterLocalNotificationsPlugin.show(
            0, title, messageText, platformChannelSpecifics);
      }
    
      @override
      void initState() {
        super.initState();
        firebaseMessaging.configure(
          onMessage: (Map<String, dynamic> message) async {
            print("onMessage: $message");
            currentMessage = message;
            await showBigPictureNotification(currentMessage);
          },
          onLaunch: (Map<String, dynamic> message) async {
            print("onLaunch: $message");
            currentMessage = message;
            await showBigPictureNotification(currentMessage);
          },
          onResume: (Map<String, dynamic> message) async {
            print("onResume: $message");
            currentMessage = message;
            await showBigPictureNotification(currentMessage);
          },
        );
    
        onSelectNotification(String payload) async {
          await navigatorKey.currentState.push(new MaterialPageRoute(...));
        }
    
        firebaseMessaging.requestNotificationPermissions();
        flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
        var initializationSettingsAndroid =
            new AndroidInitializationSettings('ic_stat_fiber_new');
        var initializationSettings =
            new InitializationSettings(initializationSettingsAndroid, null);
        flutterLocalNotificationsPlugin.initialize(initializationSettings,
            onSelectNotification: onSelectNotification);
      }
    
      @override
      Widget build(BuildContext context) {
        < widget >
      }
    }
    
    
    flutter doctor -v
    [√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.16299.1004], locale en-IE)
        • Flutter version 1.2.1 at flutter
        • Framework revision 8661d8aecd (8 weeks ago), 2019-02-14 19:19:53 -0800
        • Engine revision 3757390fa4
        • Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)
    
    [√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
        • Android SDK at AppData\Local\Android\sdk
        • Android NDK location not configured (optional; useful for native profiling support)
        • Platform android-28, build-tools 28.0.3
        • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
        • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
        • All Android licenses accepted.
    
    [√] Android Studio (version 3.2)
        • Android Studio at C:\Program Files\Android\Android Studio
        • Flutter plugin version 31.1.1
        • Dart plugin version 181.5656
        • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    
    [√] VS Code (version 1.32.3)
        • VS Code at \AppData\Local\Programs\Microsoft VS Code
        • Flutter extension version 2.24.0
    
    [√] Connected device (1 available)
        • Android SDK built for x86 • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)
    
    • No issues found!
    
    dependencies:
      flutter:
        sdk: flutter
      http:
      url_launcher: 4.2.0+3
      flutter_image: ^1.0.0
      path_provider: 0.4.1
      flutter_downloader: 1.1.3
      fluttertoast: ^2.2.11
      pin_code_view: 0.1.0
      image_picker: 0.4.12+1
      firebase_core: 0.2.5+1
      firebase_storage: 1.1.0+1
      uuid: ^1.0.0
      cupertino_icons: ^0.1.0
      permission_handler: 1.0.1
      transparent_image: 0.1.0
      shared_preferences: 0.4.3
      flutter_launcher_icons: ^0.7.0
      firebase_messaging: 2.1.0
      flutter_local_notifications: 0.4.5
    

    On older versions of some dependencies due to AndroidX issue.

    Working Notification when app in foreground working_notificaiton

    Not working Notification when app in foreground not_working_notification