google-chrome - Google Chrome 浏览器静默推送通知

标签 google-chrome notifications google-cloud-messaging web-push push-api

我一直在阅读有关 Chrome 的 Web Push API 实现的文档 here ,我注意到 API 说“您 promise 在收到推送时显示通知”,并且在限制条件下表示“您必须在收到推送消息时显示通知”。

在本地主机上实现示例后,我使用 cURL 成功发送推送通知。我很好奇,所以我注释掉了实际调用 showNotification 函数的行,并放入 console.log 中,结果发现我实际上可以发送、接收并完全忽略推送通知。我什至尝试使用 if 语句来控制是否根据我从主页控制的全局 bool 值显示它们,并且这有效。所以我想知道是否有人知道他们所说的“需要显示通知”和“静默推送通知”不可用是什么意思?

这不仅仅是为了它,我可能需要合理地控制是否在我的网络应用程序中显示这些通知,所以如果这实际上是可能的,那就太好了。如果您好奇,请使用下面的代码。

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
      })
    );
  }
});

编辑:在 Chrome 47 上,如果相关的话。

更新:经过进一步的实验,我发现了一个明显的问题,即一旦用户导航离开然后重新导航到同一页面,我就无法更新原始全局变量。但是,我可以使用 serviceworker 本身的变量并使用描述的 API here 向 serviceworker 发送消息来规避此问题。切换 showNotifications bool 值。

最佳答案

您确实必须显示通知,如果您不显示通知,您会从浏览器收到强制通知,显示“此网站已在后台更新”。但显示恐怖信息的要求稍微放宽了:

截至 16 年 1 月,似乎最多会检查最后 10 条通知,以确定每条通知是否显示通知。如果最近十个通知中的一个通知显示通知,则视为意外,浏览器不会显示可怕的“此网站已在后台更新”。您必须错过过去十个通知中的两个通知,可怕的消息才会出现。

注意:如果事件浏览器选项卡地址栏中的 URL 与您页面的来源匹配,并且浏览器最小化,则您不需要显示通知。如果您在运行测试时位于页面本身,这可能就是您的测试成功的原因。

跟踪实现的 Chromium 错误: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

关于google-chrome - Google Chrome 浏览器静默推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092065/

相关文章:

google-chrome - 使用灯塔在 gulp 中生成 HTML 报告

javascript - 如何在我的 Chrome 扩展程序中包含外部对象?

android - GCM客户端未收到推送通知

Android oreo - 推送通知崩溃

notifications - Slack:有没有办法禁用所有@channel 通知

android - 如果应用程序在某些设备中关闭,GCM 推送通知将不起作用

javascript - 从命令行使用 headless chrome 执行单个 Javascript 文件

javascript - 为什么 Chrome 无法可靠地加载 3 个简单的音频文件?

svn - Google 代码电子邮件通知

c# - 当某事订阅事件/委托(delegate)时有什么方法可以得到通知?