gpt4 book ai didi

ios - 有没有办法在 iOS 上自动更新(或清除缓存)PWA?

转载 作者:可可西里 更新时间:2023-11-01 05:10:58 25 4
gpt4 key购买 nike

我一直在 iOS 上努力寻找在 Android 上轻松运行的东西:让我的 PWA 在有新版本时自动更新。我完全不确定这在 iOS 上是否可行。我已经使用 vue.js 和 Quasar 构建了我的应用程序,一切都在 Android 上开箱即用。这是目前 iOS 版本的(丑陋、可怕的)方式:

  1. 我可以检查我自己的服务器的版本,并将它与存储在我的应用程序(在 indexedDB 中)中的当前版本进行比较,并发出有新版本的通知。到目前为止一切顺利。
  2. 除了让用户手动清除 SAFARI 缓存 (!!) 之外,我无法弄清楚如何以编程方式从应用程序中清除 PWA 缓存或以其他方式强制上传。

所以此时我想我的问题是:

  1. 有没有人能够在 iOS(11.3 或更高版本)上获得 PWA 以在新版本可用时自动更新?
  2. 有没有办法从我的 PWA 中清除 (safari) 应用缓存?

显然,通知用户为了更新他们必须在应用程序之外执行几个步骤才能刷新应用程序,这是一种非常糟糕的用户体验,但似乎这就是 iOS 目前所处的位置,除非我遗漏了什么。有没有人在任何地方做过这项工作?

最佳答案

经过数周又数周的搜索,我终于找到了解决方案:

  1. 我在服务器上添加了对版本字符串的检查,并将其返回给上述应用程序。

  2. 我在 localtstorage (IndexedDB) 中查找它,如果找不到,我会添加它。如果找到它,我会比较版本,如果服务器上有更新的版本,我会弹出一个对话框。

  3. 关闭此对话框(我的按钮标记为“更新”)运行 window.location.reload(true),然后将新版本字符串存储在本地存储中

瞧!我的应用程序已更新!我简直不敢相信它归结为如此简单的事情,我无法在任何地方找到解决方案。希望这对其他人有帮助!

2019 年 9 月更新:

上述技术存在一些问题,特别是它绕过了 PWA service worker 机制,有时重新加载不会立即加载新内容(因为当前的 SW 不会释放页面)。我现在有了一个似乎适用于所有平台的新解决方案:

function forceSWupdate() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) {
registration.update()
}
})
}
}
forceSWupdate()

在我的 serviceworker 中,如果有更新,我现在会抛出对话框,然后从那里执行 location.reload(true)。这总是会导致我的应用程序立即刷新(重要的警告是我已将 skipWaitingclientsClaim 指令添加到我的注册中)。

这在每个平台上都是一样的,我可以通过编程检查更新或等待 service worker 自己完成(尽管它检查的时间因平台、设备和其他不可知因素而有很大差异。通常不会不过超过 24 小时。)

关于ios - 有没有办法在 iOS 上自动更新(或清除缓存)PWA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com