我正在为我的网站用户实施Chrome推送通知。我能通过服务工作者成功完成。我正在关注这些文章/教程
当我想发送通知 现在 时,这种情况非常有效,即无需安排将来。
我的问题:
我想在当天晚些时候安排此通知可能会重复发生,我可以通过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中使用吗?
答案 0 :(得分:2)
通过始终展示最新数据,您已经尽力而为。您可以考虑的另一种方法是跟踪客户端已被告知的事件,并在每次获取信息时移至下一个事件。当然,这确实有可能失去同步。
我们计划通过Chrome 49(将在3月份到达稳定频道)提供对数据有效负载的支持。这允许您在消息中包含最多4KB的数据,并且可以解决您的问题。
在略微切线上,请注意使用有效负载将要求您加密消息中包含的数据。我们将在发布时提供大量文章(类似于您链接到的文章)和库。
答案 1 :(得分:1)
获取通知数据时,您可以将此条目标记为已读,或将其删除。这样做可以实现,当有两条消息供用户显示时,第一个fetch
请求获取第一条未读消息并将其标记为已读,第二条消息不能接收上一条消息,因为它是已标记。
另一种解决方案是在一个fetch
请求中使用 所有 未读消息,并将所有消息显示给用户。这样做,你可能会“空”推动什么也不做。
答案 2 :(得分:1)
Google Chrome当前正在测试新的Notification Triggers 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)
});
}
您可以通过注册原始试用here来立即在网站上启用Notification Triggers API。