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
,它的工作很好(
如果在发送 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