Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

firebase_messaging onResume and onLaunch not working

I am getting the notification when the app is in the foreground but not when the app in the background. Also, I have google-ed/StackOverflow-ed for like 2 hours or more but able to resolves this.

My Configurations are :

  firebase_auth: ^0.10.0   firebase_messaging: ^5.0.0 

The manifest is like this:

Manifest

The code is like this:

final notifications = new FirebaseMessaging();  class AppNotifications {   static String fcmToken = '';    static Future<Null> init() async {     appLogs("AppNotifications init");      notifications.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));      await configure();      fcmToken = await notifications.getToken();     appLogs("FCM TOKEN : " + fcmToken);      notifications.onTokenRefresh.listen((newToken) {       fcmToken = newToken;       appLogs("FCM TOKEN onTokenRefresh: " + fcmToken);     });      await updateFCMToken();   }    static Future<Null> configure() async {     appLogs("AppNotifications Configure");      notifications.configure(onMessage: (msg) {       appLogs('FCM onMessage: ' + msg.toString());     }, onLaunch: (lun) {       appLogs('FCM onLaunch: ' + lun.toString());     }, onResume: (res) {       appLogs('FCM onResume: ' + res.toString());     });   }    static Future<Null> updateFCMToken() async {     auth.currentUser.fcmToken = fcmToken;     await updateUserInSharedPreference();   } } 

I am calling the function like this:

class HomeScreenState extends State<HomeScreen> {     @override   void initState() {     super.initState();      Future.delayed(Duration(milliseconds: 100), () async {       await AppNotifications.init();     });   }  ..... .... 

I am using postman for sending the notification :

Postman

My logs :

**(App is Foreground)**  I/flutter (31888): APPLOGS : FCM onMessage: {notification: {title: Test notification title, body: Test notification body}, data: {status: done, id: 1, foo: bar, click_action: FLUTTER_NOTIFICATION_CLICK}}   **(App is Background)**  W/FirebaseMessaging(31888): Missing Default Notification Channel metadata in AndroidManifest. Default value will be used. 

Flutter doctor :

[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.4 18E226, locale en-GB)     • Flutter version 1.2.1 at /Users/Ajay/SDK/flutter     • Framework revision 8661d8aecd (3 months 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 /Users/Ajay/Library/Android/sdk     • Android NDK location not configured (optional; useful for native profiling support)     • Platform android-28, build-tools 28.0.3     • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java     • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)     • All Android licenses accepted.  [✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)     • Xcode at /Applications/Xcode.app/Contents/Developer     • Xcode 10.2.1, Build version 10E1001     • ios-deploy 1.9.4     • CocoaPods version 1.6.0  [✓] Android Studio (version 3.3)     • Android Studio at /Applications/Android Studio.app/Contents     • Flutter plugin version 34.0.1     • Dart plugin version 182.5215     • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)  [!] VS Code (version 1.33.1)     • VS Code at /Applications/Visual Studio Code.app/Contents     ✗ Flutter extension not installed; install from       https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter  [✓] Connected device (1 available)     • ONEPLUS A5000 • b47e8396 • android-arm64 • Android 9 (API 28) 
like image 927
Ajay Kumar Avatar asked May 07 '19 14:05

Ajay Kumar


2 Answers

lost my 2 days to fix this issue, it may helpful for you. notification tag only for showing notification. you can access only data content on onResume/onLaunch.

If you want handle notification message inside onResume/onLaunch add those messages in data tag also, Then you can do what ever you want.

refer more detail on this link

send this notification message

{        "notification": {           "body": "body",           "title": "title"        },        "priority": "high",        "data": {         "body": "body",           "title": "title"           "click_action": "FLUTTER_NOTIFICATION_CLICK",           "id": "1",           "status": "done",           "image": "https://ibin.co/2t1lLdpfS06F.png",        },        "to": <your token>     } 

you will receive below information onResume or onLaunch, your notification tag will be empty here

{notification: {}, data: {image: https://ibin.co/2t1lLdpfS06F.png, google.original_priority: high, google.sent_time: 1560858283888, google.delivered_priority: high, body: body , title: title, click_action: FLUTTER_NOTIFICATION_CLICK, google.message_id: 0:1560858283908500%eefdc741eefdc741, collapse_key: <package>, google.ttl: 2419200, from: <from>, id: 1, status: done}} 

you can use title and body which is added in data tag.

like image 89
Anand saga Avatar answered Oct 02 '22 23:10

Anand saga


In my case, onResume and onLoad were not firing because I was missing click_action: 'FLUTTER_NOTIFICATION_CLICK' under the notification property, not the data property.

Once I changed my payload to be in the following format, onResume and onLoad started firing for me.

{     notification: {         title: 'Title',         body: 'Body',         click_action: 'FLUTTER_NOTIFICATION_CLICK'     } } 

I found this documented here.

If you are setting this in TypeScript (possibly others), it will be necessary to set this via the message's android.notification.clickAction property. Otherwise, you may receive errors about the property being invalid. An example of this with a MulticastMessage is as follows. Note that it doesn't show message construction from start to finish; only enough to show the context for setting clickAction.

// Initialize the notification const notification: admin.messaging.Notification = {     title: 'Hello',     // Though the "clickAction" property is available here, it throws an error about     // having an invalid property when actually trying to send the notification.     // Instead, the "clickAction" property is set further downstream under the     // MulticastMessage.android.notification object.     // clickAction: 'FLUTTER_NOTIFICATION_CLICK' };  // Do other things to build your notification  const message: admin.messaging.MulticastMessage = {     tokens: [],     notification: notification };  // Do other things to build your message  // If a notification is being sent then set the click_action if (message.notification) {     // Combine with the existing message.android object, if one exists     message.android = message.android || {};     message.android.notification = Object.assign(message.android.notification || {}, {         clickAction: 'FLUTTER_NOTIFICATION_CLICK'     }); } 
like image 32
cokeman19 Avatar answered Oct 03 '22 01:10

cokeman19