我一直在尝试使用Firebase来获取推送通知。到目前为止,我已经成功地发送了一个空消息“ tickle”。问题在于添加消息有效负载似乎对客户端收到的内容没有影响。那就是服务人员只是将其视为另一条空消息。
我从这里开始浏览Google指南-https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications
在经历了如何发送空消息之后,它说消息有效负载必须被加密,并建议使用现有的库来完成。引用-“与加密相关的任何事物,使用主动维护的库通常比编写自己的代码要容易得多。”
我尝试使用web-push-php,这是Google指南推荐的库之一。在遇到麻烦之后,我发现web-php-push实际上并不支持firebase。
在这里,我发现一些看起来非常简单并且不会对消息有效负载进行事件加密的示例。它只是以纯json发送。这样做没有影响,并且接收端仍然认为这是一条空消息。请参阅下面的代码。
对此我完全不知所措,我感到困惑,为什么Google指南说必须对消息数据进行加密,但是在SO上有无数的示例,它们只是以纯json文本发送。
这是我从服务器发布到终点的内容。
POST https://fcm.googleapis.com/fcm/send Authorization: key=[my server
key] Content-Type: application/json {"priority":10,"to":"[subscriber
id]","notification":{"body":"test body","title":"test title"}}
这是我的service-worker.js中的事件监听器
self.addEventListener('push', function(e) {
var body;
if (e.data) {
body = e.data.text();
} else {
body = "No message "+JSON.stringify(e);
}
var options = {
body: body
};
e.waitUntil(
self.registration.showNotification('Launtel Residential', options)
);
});
当我在上方运行发布请求时,将发生推送通知,并按预期方式触发服务人员“推送”事件,但没有消息数据。 e.data返回null。 “ e”对象始终只包含设置为true的标志。 e.isTrusted == true