Fcm serviceworker在后台接收消息但代码未执行

时间:2017-08-01 08:31:04

标签: javascript firebase firebase-cloud-messaging

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并且它的工作很好)

1 个答案:

答案 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