我一直在iOS上苦苦挣扎,试图在Android上轻松工作:让我的PWA在有新版本时自动更新。我完全不确定在iOS上是否有可能。我已经使用vue.js和Quasar构建了我的应用程序,并且一切在Android上都可以立即使用。这是当前iOS版本上的情况(难看,糟糕):
因此,我现在的问题是:
很显然,通知用户要进行更新,他们必须在应用程序外部执行几个步骤才能刷新它,这是一种令人难以置信的糟糕的用户体验,但是除非我愿意,否则这似乎是iOS当前的立足点遗漏了什么。有没有人在做这项工作?
答案 0 :(得分:7)
经过数周的搜索,我终于找到了解决方案:
我在服务器上添加了对版本字符串的检查,并如上所述将其返回到应用程序。
我在localtstorage(IndexedDB)中寻找它,如果找不到,则添加它。如果找到它,则比较版本,如果服务器上有较新的版本,则会抛出一个对话框。
关闭此对话框(我的按钮标记为“更新”)运行window.location.reload(true)
,然后将新的版本字符串存储在本地存储中
Voila!我的应用程序已更新!我不敢相信它可以归结为如此简单,在任何地方都找不到解决方案。希望这对其他人有帮助!
答案 1 :(得分:1)
如果仍然有人对此有疑问,registration.update()对我不起作用。我使用了确切的解决方案,但是当服务器中的版本与本地存储的版本不匹配时,我必须取消注册服务人员才能使用。
if ('serviceWorker' in navigator) {
await this.setState({ loadingMessage: 'Updating Your Experience' })
navigator.serviceWorker.getRegistrations().then(function(registrations) {
registrations.map(r => {
r.unregister()
})
})
await AsyncStorage.setItem('appVersion', this.state.serverAppVersion)
window.location.reload(true)
}
然后,当应用程序重新加载时,服务工作人员将重新注册,并且该应用程序的当前版本在iOS Safari浏览器和带有“书签”的PWA中可见。