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 后端)中的前景和背景问题的主要内容,如果未能解决你的问题,请参考以下文章