PWA 可以在关闭时安排通知吗?

Mor*_*itz 6 service-worker progressive-web-apps

我正在开发一个 TODO 列表 PWA,即使应用程序关闭,它也应该在每天上午 8:00 显示当天的任务(类似于闹钟)。

有没有办法通过 PWA 来实现这一目标?(主要针对Chrome/Android)

到目前为止,在我的服务人员中我已经(简化)


self.addEventListener("message", (event) => {
    // Workflow: The app sends a message that the timer should be set.
    const prom = new Promise((resolveIt) =>
      self.setTimeout(() => showAlarmAndResolve(resolveIt, event.data), '<timeout_in_ms>')
    );
    // tell the service worker to remain alive until promise is resolved
    event.waitUntil(prom); 
  }
});

async function showAlarmAndResolve(resolveIt, text) {
  const options = {
    body: text,
    tag: "todo-alert",
  };
  await self.registration.showNotification(
    "Your tasks for today",
    options
  );
  resolveIt();   // allow the service worker to terminate
}

Run Code Online (Sandbox Code Playgroud)

如果没有event.waitUntil,当我关闭手机上的应用程序(或关闭浏览器选项卡)时,不会显示通知,有了它,就会显示通知。然而,让 Service Worker 存活半天似乎是一个非常糟糕的主意 - 而且,我读到(此处:在 PWA 中保持计时器运行的最佳实践),在 Android 上,Service Worker 可能会在大约 20 分钟后终止。

如何实现类似闹钟的功能?

一些(较旧的)问题并没有真正提供那么多帮助/希望......
渐进式网络应用程序中的后台事件?(构建闹钟应用)
是否可以通过 PWA 设置闹钟?(构建计时器/闹钟应用程序)

Jef*_*ick 6

Chrome 通过通知触发器尝试了此功能,在运行原始试验后,团队决定不再继续。如果有任何变化, Chromium 问题跟踪器中将会有更新。

通过使用定期后台同步 API,您可以实现类似的每天一次的功能,而无需保证事件在一天中的何时触发。如果您的用户需要精确控制通知的显示时间,这将无济于事。此外,仅当用户完成 PWA 的安装流程时才受支持。