Firebase messaging.setBackgroundMessageHandler未接收消息

时间:2017-01-23 12:02:56

标签: javascript firebase-cloud-messaging service-worker

我正在尝试使用Firebase云消息传递。这真是太棒了,但是我正在努力让它为我工作。

我面临的问题是服务工作者,这是我的firebase-messaging-sw.js

console.log('Service worker is loaded!');

self.addEventListener('install', function(event) {
    console.log('Service Worker is being installed.');
});

self.addEventListener('activate', function(event) {
    console.log('Service Worker is being activated.');
});

importScripts('https://www.gstatic.com/firebasejs/3.6.5/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.6.5/firebase-messaging.js');

firebase.initializeApp({
    'messagingSenderId': ' ... '
});

var messaging = firebase.messaging();

messaging.setBackgroundMessageHandler(function(payload){
    console.log('Received background message: ', payload);

    return self.registration.showNotification('Title', {'body': 'Body'});
});

当我发送消息时(我正在使用PHP-FCM BTW),当页面处于焦点时,通过onMessage( ... )在浏览器中按预期收到消息,但从不在页面不是焦点或浏览器关闭;服务工作者只是没有收到消息!

“收到后台留言:......”这一行从未显示;意思是消息处理程序根本没有注册!

以下是一个示例消息响应:

{
  "from": " ... ",
  "collapse_key": "do_not_collapse",
  "data": {
    "id": "111"
  },
  "priority": "high",
  "notification": {
    "title": "Hi there",
    "body": "Message body",
    "badge": "1",
    "color": "#ffffff"
  }
}

这可能是什么问题?这让我发疯了。

2 个答案:

答案 0 :(得分:1)

我不确定您是否可以在javascript中间定义导入根目录,我认为这些调用需要位于顶部。

FCM SDK也不支持徽章价值和颜色。如果要设置徽章,可以使用后台消息处理程序显示通知,使用普通APi并通过该APi定义徽章

答案 1 :(得分:1)

否, 已注册,但由于您选择的构造通知方式而未调用。参考FCM文档:

  

https://firebase.google.com/docs/cloud-messaging/js/receive

     

“注意:如果您在HTTP或XMPP发送请求中设置了通知字段,则这些值优先于服务工作者中指定的任何值。”

所以,你有

{
    "from": " ... ",
    "collapse_key": "do_not_collapse",
    "data": {
      "id": "111"
    },
    "priority": "high",
    "notification": {
      "title": "Hi there",
      "body": "Message body",
      "badge": "1",
      "color": "#ffffff"
    }
}

,并且此结构永远不会触发BackgroundMessageHandler。由于以这种方式发送数据,因此只需覆盖变量即可。如果要触发它,则需要像这样发送通知:

{
    "from": " ... ",
    "collapse_key": "do_not_collapse",
    "priority": "high",
    "data": {
      "id": "111",
      "notification": {
        "title": "Hi there",
        "body": "Message body",
        "badge": "1",
        "color": "#ffffff"
      }
    },
    "to": "topic",
}