在 Firefox 44 中,Mozilla 为浏览器添加了 Web 推送功能。这使网站能够在需要传达重要信息时通知用户。例如,您可能有一个 Web 应用程序,希望在用户收到 WebRTC 通话或在群聊中发起新的讨论时通知用户。或者,对于消息服务,您可能希望在用户有新消息可用时通知用户。
Dan Callahan 在今年早些时候 Hacks 上的一篇文章中介绍了将 WebPush 添加到您的 Web 应用程序的详细信息。您还可以从 MDN 获取有关推送 API 的更多文档,或查看 ServiceWorker 食谱以获取有关如何使用 Web 推送以及许多其他 Service Worker 场景的示例。
虽然 Web 推送有很多好处,但它也有一些缺点。例如,如果您通知离线用户未读消息,当他们稍后返回浏览器时,用户可能会一次收到大量通知。
这可以在某些操作系统上得到一些缓解,但现在有了一种更好的方法。Mozilla 推送服务现在提供了为通知消息提供主题的功能。这意味着订阅该应用程序的任何用户代理在从离线状态返回时,只会收到主题中的最后一条消息。推送服务会用相同主题的所有先前推送消息替换,并且仅显示最新的消息。在上面提到的示例中,所有未读消息都分组到一个主题中,当离线用户打开浏览器时,他们只会收到来自该主题的一条消息,即收到的最后一条消息。
由于这是对WebPush 规范的更改,因此要使其正常工作,您需要修改实际将消息推送到推送服务的服务器代码。本质上,您必须向推送消息添加一个名为“Topic”的标头。请查看我在 Github 上的主题测试示例,了解一个简单的示例。您可以看到在 pusher/main.py 文件中如何使用以下代码添加标头
pywebpush.WebPusher(sub_info).send(
args.msg,
headers={"topic": topic},
ttl=args.ttl,
)
如果您使用 Marco Castelluccio 的 NodeJS web-push 库,则可以通过以下方式添加标头
webPush.sendNotification(req.body.endpoint, {
TTL: req.body.ttl,
payload: req.body.payload,
userPublicKey: req.body.key,
userAuth: req.body.authSecret,
headers: {
topic: topic
}
})
关于 JR Conlin
Web 推送服务器开发者,感谢您订阅猫咪趣闻。