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

Getting customized message from GCM using Web push notifications

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

有什么方法可以获取收件人的 registration_id 或 GCM returns 的 message_id?如果我可以获得其中任何一个并将它们包含在服务的回调中,我就可以自定义响应。

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

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

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

有效负载即将推出——可能 Chrome 50 或 51——基于 Web 推送协议。配置(必需的)加密会产生一些额外的开销。

这是可能的,但我不会这样做,因为它特定于 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.: 它 returns 一个承诺,所以确保你的服务工作者等待承诺被解决。