【发布时间】:2021-01-28 10:11:31
【问题描述】:
我正在尝试构建一个计时器 PWA(主要用于移动设备),它会在一定时间过去时通知用户。 (用户会知道这一点并希望它发生 - 因此请求许可不会成为问题。)
只要用户实际停留在页面上,保持浏览器打开并且不锁定屏幕,此方法就可以正常工作。
使用Wakelock API,我可以防止屏幕自行锁定——如果我们使用的是支持该功能的设备和浏览器。 (可悲的是,many don't。) NoSleep.js library 通过播放用户看不到的视频来增加对更多设备的支持。 就是这样。
但是,如果用户主动启用锁屏(很多人会本能地这样做,例如,将手机放入口袋时),则 iOS 或 Android 会在一段时间后暂停该过程。 这意味着,通知将延迟到用户再次打开浏览器。 这可能要晚得多,从而破坏了这个应用程序的全部目的。
如果我正在开发本机应用程序,我可以在 iOS 上使用匹配的 UIBackgroundMode 或 Background Fetch 或在 Android 上使用 WorkManager。 但是,将其构建为原生应用程序不会具有 PWA 的优势,例如无需安装或我们可以随意更新应用程序。
据我了解,许多(全部?)浏览器制造商似乎不希望网站能够在后台运行。 尽管如此,有没有办法构建这种 PWA? 还是我必须切换到构建本机应用程序? (如dontkillmyapp.com 等页面上所解释的那样,它可能仍然与操作系统抗争。)
【问题讨论】:
-
让设备一直处于唤醒状态而无所事事是个坏主意,因为电池会耗尽。考虑使用大多数浏览器都支持的预定通知,甚至不需要保持浏览器打开
-
@DimaRostopira 我同意,这将大量消耗电池。对于我想到的特定用例,这是可以接受的,尽管当然没有这个问题的替代方案会更好。至于预定通知,我猜你的意思是通知触发器(web.dev/notification-triggers)?如果是这样,这些似乎仍在开发中,并未得到广泛支持。因此,我们不能真正依赖它们。还是我错过了什么?
标签: android ios progressive-web-apps web-wake-lock