我在Chrome上使用网络推送通知,效果很好。但现在我想在我的通知中发送自定义消息。我可以让我的服务工作者呼叫我的网站来获取内容,就像https://simple-push-demo.appspot.com/那样 - 如果我希望每个收件人都能看到相同的消息,那就没问题了。
有没有办法让GCM返回的收件人registration_id
或message_id
?如果我可以获得其中任何一个并将它们包含在服务的回调中,我可以自定义响应。
此外,有关我们何时能够在GCM调用中包含有效负载的任何信息?
答案 0 :(得分:5)
registration_id
和message_id
字段未公开,但如果用户之前已对您的应用进行了身份验证,则服务工作者对服务器的任何fetch()
都将包含凭据(和会话信息),您可以使用它来识别它们。
如果这不适合您的情况,您可以在IndexedDB中存储用户/会话信息。
即将推出有效负载 - 可能是基于Web推送协议的Chrome 50或51。这需要额外的开销,并且可以配置(必需的)加密。
答案 1 :(得分:1)
这是可能的,但我不会这样做,因为它是GCM特有的,而其他浏览器则使用其他服务。
您可以为每个用户创建一个唯一的ID(就像我们在Mercurius中所做的那样)并将其存储在IndexedDB中,或者您可以将整个端点URL用作ID。
这是获取registration_id
的代码段
self.registration.pushManager.getSubscription()
.then(function(subscription) {
if (subscription) {
var endpoint = subscription.endpoint;
var endpointParts = endpoint.split('/');
var gcmRegistrationID = endpointParts[endpointParts.length - 1];
console.log(gcmRegistrationID);
}
});
P.S。:它返回一个承诺,因此请确保您的服务人员等待承诺得到解决。