var config = {
messagingSenderId: "18????????2"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
$.ajax({
type: "POST",
dataType: "json",
data: { notificationID: payload.data.notificationID },
url: "https://myapi/somerestservice",
success: function (data) {
console.log("remove notification status : " + data.Status + " - Message : " + data.Message);
}
});
const notificationTitle = payload.notification.title;
const notificationOptions = {
body:payload.notification.body,
};
return self.registration.showNotification(notificationTitle, notificationOptions);
我在后台收到消息,没有任何错误,消息完全显示在浏览器中
我的问题是我需要execute
一些代码来删除db
中的数据,但我在setBackgroundMessageHandler
中添加的任何代码都没有在收到消息时被触发
在后台收到消息时是否有任何事件被触发
(在前台我使用onMessage
并且它的工作很好)
答案 0 :(得分:0)
如果在发送HTTP / XMPP请求时(例如从后端)在消息上设置了notification
密钥,则不会调用向setBackgroundMessageHandler
注册的消息处理程序。 Firebase将为您处理消息并按原样显示。
如果您在应用在后台收到邮件时需要执行某些操作,则可以在邮件中使用data
键;如果省略notification
键,将调用在setBackgroundMessageHandler
注册的处理程序,您可以处理有效负载并自定义通知:
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Do you AJAX request here.
// Customize and show your notification
const notificationTitle = payload.data.title,
const notificationOptions = {
body: payload.data.body,
icon: payload.data.icon
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
注意:除了自己显示通知外,您还必须手动处理点击和关闭事件。
发送消息:
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{ "data": {
"title": "Hello",
"body": "How are you?",
"icon": "https://..."
},
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}
官方文档的这一部分可能有点令人困惑,但可以在此处找到有关何时调用两个消息处理程序的一些说明:https://sentinelstand.com/article/handling-firebase-notification-messages-in-your-web-app