FCM 和颤振(Node Js 后端)中的前景和背景问题

Posted

技术标签:

【中文标题】FCM 和颤振(Node Js 后端)中的前景和背景问题【英文标题】:Issue with foreground and background in FCM and flutter (Node Js backend) 【发布时间】:2021-12-13 06:52:31 【问题描述】:

使用的依赖:

firebase_messaging: ^10.0.1
flutter_local_notifications: ^6.0.0
firebase_core: ^1.2.1
firebase_analytics: ^8.1.2 

问题

案例 1: 当应用程序在后台运行但未终止或强制停止时,它不会触发FirebaseMessaging.onMessageOpenedApp.listen((message) 方法,而是触发Future<void> backgroundHandler(RemoteMessage? message) async

案例 2: 当应用程序处于强制停止的终止状态时,当收到通知时它没有触发FirebaseMessaging.onMessage.listen((RemoteMessage? message) ); -> 消息是null ??

源代码:

Future<void> backgroundHandler(RemoteMessage message) async 
  await Firebase.initializeApp();
  print("Back ground method called");


Future main() async 
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseMessaging.onBackgroundMessage(backgroundHandler);
  runApp(MyApp());



//Inside the Main Class//
@override
  void initState() 
    super.initState();

     FirebaseMessaging.instance.getInitialMessage().then((message) 
      print("Get Initial method called");

       Flutter toast.showToast(
            msg: message!.data,
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.CENTER,
            timeInSecForiosWeb: 3,
            backgroundColor: Colors.red,
            textColor: Colors .white,
            fontSize: 16.0); 
    );

    FirebaseMessaging.onMessage.listen((RemoteMessage? message) 
     print("On Message Listener is called");
      
    );

    FirebaseMessaging.onMessageOpenedApp.listen((message) 
      print("on Message Opened is called");
    );

节点 Js 代码

var admin = require("firebase-admin");
var serviceAccount = require("xxxx Path of the json file xxxx");

admin.initializeApp(
  credential: admin.credential.cert(serviceAccount)
);

app.post('/notification',(req, res)=>
    var registrationToken='xxxxx Token xxxxx';

    var message=
        data:
            title:'Go Notification',
            body:'Checking the app from node',
        ,
        token:registrationToken
    ;
    
    admin.messaging().send(message).then((response) => 
        console.log('Successfully sent message',response);
        return res.json(status:true, msg:'Notification Sent')
    ).catch((error) => 
        console.log('Error occurred while send the message',error);
        return res.json(status:false, msg:error)
    )

); 

【问题讨论】:

【参考方案1】:

我会尽力回答你的问题,但如果我错了,请纠正我,因为我也是新手。 在您的情况1中,当应用程序不在前台时,它将调用FirebaseMessaging.onBackgroundMessage。在您的情况 2 中发生了同样的情况。当您的应用程序终止时,它将调用 FirebaseMessaging.onBackgroundMessage 而不是 FirebaseMessaging.onMessage。我会给你documentation的链接,也许对你有帮助。

【讨论】:

正是...当您的应用程序终止时,它不会触发 FirebaseMessaging.onBackgroundMessage... 我已经使用 FlutterToast 进行了测试.. 你是终止了它(在应用列表中滑动它),还是在应用管理中强制停止它? 在应用列表中滑动它 它应该会显示。尝试检查后端是否正确发送通知。或者您可以向我们展示您的有效载荷? 应用终止时收到通知。当应用程序在前台时导航到特定屏幕,但不导航到特定屏幕,而是在应用程序从终止状态启动时导航到主屏幕。

以上是关于FCM 和颤振(Node Js 后端)中的前景和背景问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 颤振 FCM

FCM - node.js 中的计时器功能

Node.js - FCM 发送预定主题通知

如何在 node.js 中集成 FCM 以进行推送通知?

如何使用 FCM 在颤振中推送通知

socket.io 不工作,我的颤振应用程序没有连接到服务器或后端部分