您好我正在尝试为web i实施网络推送通知,遵循以下example,除了我使用python脚本连接到gcm / fcm并生成有效负载的服务器部分.i获取推送事件但event.data为空。
from datetime import datetime
from pyfcm import FCMNotification
pushService = FCMNotification(api_key ='xxx'}
registrationId=""
messageTitle = "New update available"
messageBody ="some message"
dryRun = False
extraData = {}
extraData['title'] = "nknkn"
sw.js
self.addEventListener('push',function(e){
console.log('Push Message Recevied',e.data);
var title = 'Push message';
e.waitUntil(
self.registration.showNotification(title, {
body: 'The Message form data',
icon: 'icon.jpg',
tag: 'my-tag'
}));
});
答案 0 :(得分:1)
Google Chrome和Mozilla Firefox目前都支持推送消息的有效负载,请参阅MDN上的PushMessageData。但根据Push API规范,任何有效负载必须加密,否则浏览器将丢弃它并返回 null (参见11.1.6):
如果推送消息因任何原因无法解密,或者未加密且包含任何有效负载,则丢弃该消息并终止此过程。如果推送消息不包含任何内容,则该消息可能为空,但是对于未使用与推送订阅关联的密钥对未成功解密的推送消息,不得触发推送事件。
以下是来自Google Developers的精彩文章,其中详细介绍了这些文章:Web Push Payload Encryption。和Message Encryption for Web Push的原始草稿。
我还建议您查看不同语言的WebPush已实现的库集:web-push-libs。你也可以找到一个用Python编写的lib。另一个关于Java的lib,可以将带有负载的推送消息发送到Chrome和Firefox:https://github.com/MartijnDwars/web-push。