【问题标题】:Can a PWA schedule notifications when closed?PWA 可以在关闭时安排通知吗?
【发布时间】:2022-01-27 01:03:39
【问题描述】:

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

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

到目前为止,在我的 Service Worker 中,我已经(简化了)


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
}

没有event.waitUntil,当我关闭手机上的应用程序(或关闭浏览器选项卡)时不会显示通知,有它会显示。 然而,让 Service Worker 存活半天似乎是一个非常糟糕的主意——而且,我读到(这里:Best practice for keeping timer running in PWA)在 Android 上,Service Worker 可能会在大约 20 分钟后终止。

如何实现这样的闹钟功能?

一些(较旧的)问题并没有真正提供太多帮助/希望...
Background events in progressive web apps? (building an alarm clock app)
Is it possible to set the alarm by PWA? (building a timer/alarm clock app)

【问题讨论】:

    标签: progressive-web-apps service-worker


    【解决方案1】:

    Chrome 通过Notification Triggers 试验了这个功能,在运行origin trial 之后,团队决定不再继续。如果有任何变化,Chromium issue tracker 会有更新。

    您可以使用Periodic Background Sync API 实现类似的一天一次的功能,而无需任何关于何时事件将在白天触发的保证。如果您的用户需要精确控制何时显示通知,这将无济于事。此外,仅当用户完成了您的 PWA 的安装流程时才支持它。

    【讨论】:

    • 好的,这回答了这个问题,所以尽管说“不,那是不可能的”,谢谢你的解释!与此同时,我开始为此目的使用带有 cron 作业的推送通知……对此我并不满意,但它会为我的用例完成这项工作。
    猜你喜欢
    • 2022-06-20
    • 2019-10-24
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多