PWA 的 Background Sync 在 iOS 上为啥不生效?
我用 PWA 做了个待办事项应用,用户提交任务时如果网络不好,就注册了 background sync 想等网络恢复再同步。在安卓 Chrome 上跑得好好的,但一到 iOS Safari 就完全没反应,连 sync 事件都没触发。查了文档说 iOS 对 Service Worker 支持有限,但具体哪些能用哪些不能用也搞不清楚。
我已经确认 service worker 注册成功,也申请了 notification 权限(听说 background sync 需要这个),但还是不行。是不是 iOS 根本就不支持 Background Sync 啊?那有啥替代方案吗?
顺便贴一下我页面里用的 CSS,虽然应该没关系,但怕有冲突:
.offline-banner {
background: #ff6b6b;
color: white;
padding: 8px;
text-align: center;
display: none;
}
.offline-banner.show {
display: block;
}
你那个CSS完全没问题,跟这个没关系。性能上我给你几个替代方案:
1. 用定期轮询检查网络状态,虽然耗电但能解决问题:
2. 监听online/offline事件更优雅些:
3. 实在要做后台同步,只能考虑用推送通知+本地存储。iOS支持推送通知,用户点击通知时再触发同步逻辑。
4. 终极方案是直接提示用户"网络不稳定,请保持应用在前台",虽然用户体验差但最可靠。
建议先实现方案2,性能开销最小。如果用户量大了再考虑加轮询兜底。iOS这尿性,我们也只能适应了。