4

我在 Chrome 中使用 Web 推送通知,它们运行良好。但现在我想在我的通知中传递一条自定义消息。我可以让我的 Service Worker 调用我的站点来获取内容,就像在https://simple-push-demo.appspot.com/上所做的那样——如果我希望每个收件人都看到相同的消息,这很好。

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

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

4

2 回答 2

5

registration_idandmessage_id字段没有公开,但如果用户之前已通过您的应用程序的身份验证,则从您的 Service Worker 到服务器的任何内容fetch()都将包含您可以用来识别它们的凭据(和会话信息)。

如果这对您的情况不起作用,您可以将用户/会话信息存储在 IndexedDB 中。

基于 Web Push 协议的有效负载即将推出——可能是 Chrome 50 或 51。配置(必需的)加密有点额外的开销和工作。

于 2016-01-19T20:42:38.940 回答
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);
  }
});

PS:它返回一个承诺,因此请确保您的服务人员等待承诺被解决。

于 2016-01-20T13:48:07.163 回答