过去几个小时我一直在阅读推送通知API和Web通知API。我还发现谷歌和苹果分别通过GCM和APNS提供免费的推送通知服务。

我正在尝试了解我们是否可以使用桌面通知实现浏览器推送通知,我相信这是Web通知API所做的。我看到了一个谷歌文档关于如何为Chrome在这里和这里。

现在我还不明白的是:

我们是否可以使用GCM/APNS向包括Firefox和Safari在内的所有Web浏览器发送推送通知? 如果不通过GCM,我们可以有自己的后端来做同样的事情吗?

我相信所有这些答案都可以帮助很多有类似困惑的人。


当前回答

GCM/APNS分别只适用于Chrome和Safari。

我想你可能在寻找通知:

https://developer.mozilla.org/en-US/docs/Web/API/notification

它适用于Chrome、Firefox、Opera和Safari。

其他回答

GCM/APNS分别只适用于Chrome和Safari。

我想你可能在寻找通知:

https://developer.mozilla.org/en-US/docs/Web/API/notification

它适用于Chrome、Firefox、Opera和Safari。

Javier介绍了通知和当前的限制。

我的建议是:窗户。当我们等待缺陷浏览器赶上时,Worker.postMessage()仍在使用Web Workers操作。

这些可以是对话框消息显示处理程序的回退选项,用于通知功能测试失败或权限被拒绝时。

通知has-feature和denied-permission检查:

if (!("Notification" in window) || (Notification.permission === "denied") ) {
    // use (window||Worker).postMessage() fallback ...
}

您可以通过服务器端事件将数据从服务器推送到浏览器。这本质上是一个单向流,客户端可以从浏览器“订阅”到它。从这里,你可以创建新的通知对象,作为se流到浏览器:

var source = new EventSource('/events');

source.on('message', message => {
  var notification = new Notification(message.title, {
    body: message.body
  });
}); 

Eric Bidelman写的这篇文章有点老,但它解释了SSE的基础知识,并提供了一些服务器代码示例。

这是一个简单的方法做推送通知所有浏览器https://pushjs.org

Push.create("Hello world!", {
body: "How's it hangin'?",
icon: '/icon.png',
timeout: 4000,
onClick: function () {
    window.focus();
    this.close();
 }
});

我建议使用pubnub。我尝试使用ServiceWorkers和推送通知从浏览器,然而,当我尝试它的webview不支持这一点。

https://www.pubnub.com/docs/web-javascript/pubnub-javascript-sdk