使用Web推送通知从GCM获取自定义消息

时间:2016-01-19 20:42:39

标签: web-push push-api progressive-web-apps

我在Chrome上使用网络推送通知,效果很好。但现在我想在我的通知中发送自定义消息。我可以让我的服务工作者呼叫我的网站来获取内容,就像https://simple-push-demo.appspot.com/那样 - 如果我希望每个收件人都能看到相同的消息,那就没问题了。

有没有办法让GCM返回的收件人registration_idmessage_id?如果我可以获得其中任何一个并将它们包含在服务的回调中,我可以自定义响应。

此外,有关我们何时能够在GCM调用中包含有效负载的任何信息?

2 个答案:

答案 0 :(得分:5)

registration_idmessage_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。:它返回一个承诺,因此请确保您的服务人员等待承诺得到解决。