Firebase FCM API-无法发送WebPush对象



我正在尝试设置我们的网站以使用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(拾取处理URL的哪个。

如果我删除了"通知"对象,则它可以到达我的SW,但是,SW不会从webpush.notification对象(即标题,主体或图标(中输出任何内容。但是,它将使用SW中指定的我的图标和标题。它还接收基本级"数据"对象,而不是webpush.data对象。

对我来说,文档表明将" Webpush"中放置的信息覆盖基本级对象,但是,这不会发生。

https://firebase.google.com/docs/reference/fcm/rest/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"中收到通知或数据。

如果您查看FCM文档的此页面,他们概述了不同类型的消息以及FCM处理和显示的方式的区别。

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

我将此方法用于所有涉及推动的项目。它允许您随时进行所有通知自定义,并且鉴于通知的字段仍然无法完全完成,因为您的服务人员都没有任何字段。

最新更新