【问题标题】:Firebase FCM API - unable to send WebPush objectFirebase FCM API - 无法发送 WebPush 对象
【发布时间】:2018-02-21 12:40:23
【问题描述】:

我正在尝试将我们的网站设置为使用 Firebase FCM 发送网络和移动通知。

{
    "data":{
        "url":"https://www.google.com"
    },
    "webpush":{
        "data":{
            "title":"yey"
        },
        "notification":{
            "title":"Web Title",
            "body":"Web Body",
            "icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Stack_Overflow_logo.svg/250px-Stack_Overflow_logo.svg.png"
        }
    },
    "notification":{
        "title":"Some Title",
        "body":"Test Message 1"
    },
    "token":"a_token_here"
}

当向指定了“通知”的网站令牌发送消息时,浏览器会输出此消息,但是,“数据”对象不执行任何操作,表明我的服务工作者 (sw) 没有接收到它,处理网址。

如果我删除“通知”对象,它会到达我的 sw,但是,sw 不会从 webpush.notification 对象输出任何内容(即不是标题、正文或图标)。但是,它将使用我在 sw.xml 中指定的图标和标题。它还接收基本级别的“数据”对象,但不接收webpush.data 对象。

对我来说,文档建议放置在“webpush”中的信息应该覆盖基本级别的对象,但是,这不会发生。

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#WebpushNotification

当前的解决方法是将所有内容都粘贴到基础级别的“数据”对象中,该对象可由 sw 有效负载访问并用于输出信息,但这似乎不是 API 的意图。

服务工作者:

messaging.setBackgroundMessageHandler(function(payload) {
    const title = 'A Title';
    const options = {
        body: payload.data.body,
        icon: 'https://example.com/images/company_logo.png'
    };
    const url = payload.data.url;

    self.addEventListener('notificationclick', function(event) {
        event.notification.close();
        event.waitUntil(self.clients.openWindow(url));
    });

   console.log(payload);
   return self.registration.showNotification(title, options);
});

如上所述,如果我没有指定基本级别的“通知”对象,则 sw 确实会接收消息并将它们输出到控制台。但是,我没有收到来自“webpush”的通知或数据。

【问题讨论】:

    标签: javascript firebase firebase-cloud-messaging


    【解决方案1】:

    如果您查看 FCM 文档的 this 页面,它们会概述不同类型的消息以及 FCM 处理和显示它们的方式的差异。

    您在数据对象中传递所有参数的解决方法建议是完全可以接受的,并且是协议中包含的一个概念,作为使用预定义字段的公认替代方案。

    我在所有涉及推送的项目中都使用这种方法。它允许您即时进行所有通知自定义,并且鉴于通知的字段仍未完全确定,它可以为您的服务人员提供一点未来证明,因为您的所有字段都没有硬编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2021-10-17
      • 2022-08-22
      • 2019-11-14
      • 2020-09-14
      • 1970-01-01
      • 2017-08-07
      相关资源
      最近更新 更多