如何实现推送通知跨浏览器?

Posted

技术标签:

【中文标题】如何实现推送通知跨浏览器?【英文标题】:How to implement push notification cross-browser? 【发布时间】:2017-06-08 18:16:03 【问题描述】:

我有一个 Web 应用程序,我需要用户能够看到他们的通知是否已经登陆。我希望通知图标在有新图标时更改其状态。

基本上,我想监听 API 端点何时为当前用户更新其状态,并在前端更改其状态。

我想把那个端点做成一个可观察的,把前端做成一个观察者,但我不知道这是否符合我的需要。

有什么想法吗?

【问题讨论】:

签出socket.io 【参考方案1】:

我建议使用网络套接字实现,例如Socket.io。

尽管 Socket.io 有许多替代品,但它的主要优势在于它为旧版浏览器提供了多种备用方案。所以,例如如果 web 套接字不可用或不工作,它会尝试 AJAX 长轮询。这样,您甚至可以支持一次创建的浏览器,当时甚至没有人知道 Web 套接字是什么 - 但对您而言,API 保持不变。

如果您知道只需要处理现代浏览器,则可以使用更轻量级的替代方案,例如ws.

如果您正在寻找完全不同的东西,它完全基于 HTTP 并且不需要额外的协议,您可能会对html5 Server-sent events 感兴趣。它们工作得很好,但与 Web 套接字相比,它们不是双向的,它们是 currently not supported in IE and Edge。他们还有一些其他的缺点。例如,无法向 SSE 请求添加自定义标头。

对于 HTTP2,Web 套接字在未来还会产生多大的影响可能值得怀疑,尤其是考虑到诸如 Streams API 之类的东西即将到来的情况下。然后,您基本上可以使用纯 HTTP 解决所有问题,这也有一些优势。但是现在,Streams API 还不在这里,让我们拭目以待……

【讨论】:

并将其与Notification API结合起来 尚未阅读有关 Streams API 的任何内容。我想到了 Observables,你怎么看? Observables 和 Streams 是两个不同的东西:虽然 observables 是可以被观察的对象,但 Streams 处理从服务器到客户端的数据传输,反之亦然。所以,至少在这种情况下,比较它们是苹果和橙子。 我们将在最后实现套接字!正如你所建议的那样。标记为已接受的答案,谢谢!

以上是关于如何实现推送通知跨浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

如何向网络浏览器发送推送通知?

如何在颤振中实现推送通知

如何实现 Flutter Web 推送通知

Safari 推送通知

适用于 chrome、firefox 和 safari 浏览器的 Azure 浏览器推送通知

如何根据数据库中的数据实现推送通知?