谷歌Chrome无声推送通知

Rub*_*Jr. 9 notifications google-chrome google-cloud-messaging web-push push-api

我一直在阅读Chrome 在这里实施Web Push API的文档,我注意到API说"你保证在收到推送时会显示通知",并且在限制条件下它声明"你必须在你会收到推送信息".

在我的localhost上实现示例后,我使用cURL成功发送推送通知.我很好奇,所以我注释掉实际上调用showNotification函数的行,然后放入console.log,发现我实际上可以发送,接收和完全忽略推送通知.我甚至尝试使用if语句来控制是否根据我从主页面控制的全局布尔值来显示它们,这是有效的.所以我想知道是否有人知道他们的意思是说你需要显示通知,并且无法提供无声推送通知?

这不仅仅是为了它,我合法地可能需要控制是否在我的网络应用程序中显示这些通知,所以如果这实际上是可能的话会很好.如果你好奇,请在下面编写代码.

self.addEventListener('push', function(event) {
  var title = 'New Message';
  var body = 'You have received a new message!';
  var icon = '/img/favicon.png';
  var tag = 'well-notification';
  console.log("DID RECEIVE NOTIFICATION")

  if(settingsShowNotification) {
    event.waitUntil(
      self.registration.showNotification(title, {
         body: body,
         icon: icon,
         tag: tag
      })
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

编辑:在Chrome 47上,如果它是相关的.

更新:经过进一步的实验,我发现了一个明显的问题,即一旦用户导航离开然后重新导航到同一页面,我就无法更新原始的全局变量.但是,我能够使用serviceworker本身的变量并使用此处描述的API向服务工作者发送消息以切换showNotifications布尔值来绕过这一点.

Jas*_*son 10

您必须显示通知,如果您没有显示通知,则会从浏览器收到强制通知,说"此站点已在后台更新".但显示可怕消息的要求略有放松:

从16年1月开始,似乎检查最后10个通知是否每个都显示通知.如果在这十个一个通知,通知并没有表现出一个通知,一个被认为会发生事故,浏览器将不显示吓人"这个网站已在后台更新".您必须在过去十年中错过两个通知才能显示可怕的消息.

注:如果在活动的浏览器标签的地址栏中的URL匹配你的网页的起源,以及浏览器最小化,你是不是需要出示的通知.这可能是您的测试成功的原因,如果您在运行测试时在页面上.

跟踪实施情况的Chromium bug:https://code.google.com/p/chromium/issues/detail?id = 437277

相关的源代码行:https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc&l=249

  • 在我们收到通知后的情况下,我们检查服务器上的状态,并仅在满足条件时显示通知.为了防止强制通知,我们返回永远不会履行的承诺,例如`event.waitUntil(new Promise(function(){}))`. (5认同)