3

我正在为我的网站用户实施 chrome 推送通知。我可以通过服务人员成功地做到这一点。我正在关注这些文章/教程

  1. https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web?hl=en
  2. http://www.html5rocks.com/en/tutorials/service-worker/introduction/

当我想现在发送通知时,这非常有效,即没有安排未来。

我的问题:

我想在当天晚些时候安排此通知可能会重复出现,我可以通过 cron 来完成。但是 GCM 不会像这里所说的那样向您发送有效负载https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web?hl=en我引用。

目前在 Chrome 中实现 Push API 的一个缺点是您无法通过推送消息发送任何数据。不,什么都没有。这样做的原因是,在未来的实现中,有效负载数据必须在您的服务器上加密,然后才能发送到推送消息端点。这样,无论是什么推送提供者,端点都无法轻松查看推送消息的内容。这还可以防止其他漏洞,例如 HTTPS 证书验证不佳以及服务器和推送提供程序之间的中间人攻击。但是,尚不支持此加密,因此在此期间您需要执行提取以获取填充通知所需的信息。

因此,我无法弄清楚我在浏览器中收到了哪个计划通知的推送事件。因为可能有多个通知发送到 GCM。

我正在获取通知表中的最后一条记录,即我总是显示最后一条记录数据。因为我不知道我在 chrome 浏览器中收到推送事件的通知。

我的问题:

是否有解决方法来安排通知并向客户端/浏览器显示正确的通知?甚至可以在原生 chrome push api 中使用吗?

4

3 回答 3

2

Google Chrome 目前正在测试执行此操作的新通知触发器 API

这是一个示例(来自上面的链接),它在约会前 10 分钟安排提醒:

async function createAppointment(tag, title, timestamp) {
  // .. create the appointment in application-level code ..

  // Schedule a reminder to be shown to the user:
  await swRegistration.showNotification(title, {
    tag, body: 'Your appointment is due in ten minutes!',
    showTrigger: new TimestampTrigger(timestamp - TEN_MINUTES)
  });
}

您可以通过在此处注册原始试用版来立即在您的站点上启用通知触发器 API 。

于 2020-03-20T13:21:34.210 回答
2

通过始终提供最新数据,您已经尽了最大努力。您可以考虑的一种替代方法是跟踪客户已被告知哪些事件,并在每次获取信息时移至​​下一个事件。当然,这确实有可能不同步。

我们计划通过 Chrome 49 提供对数据有效负载的支持(应该会在 3 月份达到稳定通道)。这允许您在消息中包含多达 4KB 的数据,并且应该可以解决您的问题。

请注意,使用有效负载将要求您加密消息中包含的数据。我们将在发布时提供一篇详尽的文章(类似于您链接到的文章)和库。

于 2015-12-09T17:59:57.903 回答
1

当您获取通知数据时,您可以将此条目标记为已读,或将其删除。这样做可以实现当有两条消息供用户显示时,第一个fetch请求获取第一条未读消息并将其标记为已读,而第二个请求不能获取前一条消息,因为它已经标记。

另一种解决方案是在一个请求中获取所有fetch未读消息并将所有未读消息显示给用户。这样做,你可能会有“空的”推送什么都不做。

于 2015-12-10T15:24:05.963 回答