Google Chrome 静默推送通知
Google Chrome Silent Push Notifications
我一直在阅读有关 Chrome 的 Web 推送实施的文档 API here,我注意到 API 说 "you promise to show a notification whenever you receive a push" 并在限制条件下表示 "you have to show a notification when you receive a push message"。
在我的本地主机上实现示例后,我使用 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
})
);
}
});
编辑:在 Chrome 47 上,如果相关的话。
更新:经过进一步试验,我发现了一个明显的问题,即一旦用户离开并重新导航到同一页面,我就无法更新原始全局变量。但是,我能够使用 serviceworker 本身的变量来规避此问题,并使用 API 描述的 here 向 service worker 发送消息以切换 showNotifications 布尔值。
您必须显示通知,如果您不显示通知,您会收到来自浏览器的强制通知 "This site has been updated in the background"。但显示恐怖信息的要求略有放宽:
截至 2016 年 1 月,似乎最多检查 10 条通知,看是否每条通知都显示了通知。如果最近十个通知中有一个通知 没有 显示通知,则认为是意外,浏览器不会显示可怕的 "This site has been updated in the background"。您必须在最近 10 次中错过 两次 次通知,才会显示可怕的消息。
注意:如果活动浏览器选项卡地址栏中的 URL 与您页面的来源匹配,并且浏览器未最小化,则您 不需要 来显示通知。这可能就是您的测试成功的原因,如果您在 运行 测试时在页面本身上。
跟踪实现的 Chromium 错误:https://code.google.com/p/chromium/issues/detail?id=437277
我一直在阅读有关 Chrome 的 Web 推送实施的文档 API here,我注意到 API 说 "you promise to show a notification whenever you receive a push" 并在限制条件下表示 "you have to show a notification when you receive a push message"。
在我的本地主机上实现示例后,我使用 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
})
);
}
});
编辑:在 Chrome 47 上,如果相关的话。
更新:经过进一步试验,我发现了一个明显的问题,即一旦用户离开并重新导航到同一页面,我就无法更新原始全局变量。但是,我能够使用 serviceworker 本身的变量来规避此问题,并使用 API 描述的 here 向 service worker 发送消息以切换 showNotifications 布尔值。
您必须显示通知,如果您不显示通知,您会收到来自浏览器的强制通知 "This site has been updated in the background"。但显示恐怖信息的要求略有放宽:
截至 2016 年 1 月,似乎最多检查 10 条通知,看是否每条通知都显示了通知。如果最近十个通知中有一个通知 没有 显示通知,则认为是意外,浏览器不会显示可怕的 "This site has been updated in the background"。您必须在最近 10 次中错过 两次 次通知,才会显示可怕的消息。
注意:如果活动浏览器选项卡地址栏中的 URL 与您页面的来源匹配,并且浏览器未最小化,则您 不需要 来显示通知。这可能就是您的测试成功的原因,如果您在 运行 测试时在页面本身上。
跟踪实现的 Chromium 错误:https://code.google.com/p/chromium/issues/detail?id=437277