延迟HTML5通知?

7

我一直在关注HTML通知和服务工作者的状态,并想知道是否可以延迟显示通知。基本上,我希望能够说“30分钟后提醒我”(或其他时间),然后在30分钟后向用户推送通知。这可以立即安排,但我没有看到任何允许此功能的功能。

我是否遗漏了什么,还是在当前状态下(特别是Chrome API方面)不可能实现?


1
为什么不通过超时处理程序发送通知? - Pointy
类似这样的尖锐问题表明它不起作用:https://github.com/slightlyoff/ServiceWorker/issues/107 ,而且无论如何,这可能意味着服务工作者在后台不断运行,这对移动设备来说似乎并不好。 - Alastair
请参考 https://github.com/slightlyoff/BackgroundSync/blob/master/explainer.md#periodic-synchronization 中的一种可能方法,但需要注意以下几点:目前没有任何浏览器实现该方法,它不能保证精确的执行时间,并且它适用于重复事件(因此您需要在第一个事件触发后注销)。 - Jeff Posnick
2个回答

6
这在现有形式下对于服务工作者来说是可能的,但不是直接的。这并不直接,因为服务工作者不能保持自己半小时的清醒状态,也不能使用setTimeoutsetInterval来唤醒自己。浏览器会关闭工作者,并不会记录任何超时或间隔。您可以通过来自打开标签页的消息来唤醒它,但是您说您不想保持打开标签页,如果您假设有一个打开的标签页,那么为什么还要使用服务工作者呢?正如Jeff Posnick在评论中建议的那样,您或许可以最终使用Sync或PeriodicSync API,但是正如他所指出的那样,它们尚未实现,而且本身也不是为此而设计的。
您可以使用Push API在当前版本的Chrome中实现您想要的功能,但是您需要将服务器包含在循环中,并设置推送通知服务(即GCM)。以下是大致的工作流程:
  • 当您决定延迟通知时,请让服务器知道
  • 延迟后,服务器会为您的用户发送推送消息
  • 服务工作者在响应推送时被唤醒并创建新的通知

最后一部分可能有些麻烦,因为目前实际上无法使用任何类型的负载发送推送,因此您的服务工作者需要找到某种方法来确定通知应该是什么。也许服务器有一个已暂停通知的列表,服务工作者可以从那里获取,或者您将它们保存在IndexedDB中。


1

如果没有其他问题,我会将其标记为正确的,但我希望有一种不需要在整个时间保持选项卡打开的方法 - 特别是在移动设备上,人们不太可能这样做。 - Alastair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接