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

2024-03-02

我一直在 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 服务工作机制,并且有时重新加载不会立即加载新内容(因为当前的软件不会释放页面)。我现在有一个新的解决方案,似乎适用于所有平台:

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

在我的服务人员内部,如果有更新,我现在会抛出对话框,然后执行我的操作location.reload(true)从那里。这总是会导致我的应用程序立即刷新(我添加了重要的警告skipWaiting and clientsClaim我的注册指令)。

这在每个平台上都是一样的,我可以以编程方式检查更新或等待服务工作人员自行完成(尽管它检查的时间因平台、设备和其他不可知因素而异。通常不超过 24不过几个小时。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 iOS 上自动更新(或只是清除缓存)PWA? 的相关文章

  • iPad 3 renderInContext 缓慢 - 渲染性能不佳

    我试图从用户可以绘画的视图中获取图像 或添加一些其他视图 到目前为止 iPad1 和 2 一切正常 但在 iPad3 上它却像狗一样跑起来 我只是使用图层 renderInContext 方法 if UIScreen mainScreen
  • 如何隔离 Vuetify 全局样式

    我已经开始在旧的现有项目中将 Vue js 与 Vuetify 结合使用 所以我没有重写所有前端 我只是导入了Vue并替换了一些部分 然后我注意到一个非常意想不到的行为 Vuetify 具有常见类的全局样式 例如 title它不仅影响整个页
  • 扩展中的 Swift 覆盖函数

    如果我有课 class Spaceship
  • 具有自定义视图的相机

    我的应用程序使用相机 我想在相机预览上添加叠加层 例如 我想在使用相机时使用相框 还想添加一个用于相机操作的自定义栏 请帮助我做同样的事情 您可能正在尝试使用 UIImagePickerController 但我知道这个可以解决你的问题 您
  • Xamarin Form - IOS:如何检测 UIView 大小已更改

    我使用 ContentView 创建了一个 Xamarin 表单 并为 Android 创建了一个渲染器 现在我必须为 IOS 创建一个渲染器 在 android 渲染器中 我可以重写 onSizeChanged 并将这些宽度 高度值传递给
  • 有没有办法反转 SKSpriteNode 的颜色

    我想知道是否可以反转 SKSpriteNode 的颜色 或调整色调 您可以通过应用带有 SKEffect 节点的 CIFilter 来反转颜色 像这样的东西应该有效 SKEffectNode effectNode SKEffectNode
  • 使用 Xcode 6 XLIFF 导出的 iOS 本地化/国际化设置 Bungle

    背景 Xcode 6 添加了快速导出功能 可为每种语言创建单个 XLIFF 文件 只需从文件导航器中选择您的项目 然后选择菜单项编辑器 导出以进行本地化 Issue 它工作得非常好 并且 XML 中包含了所有内容 除了设置捆绑字符串 有人有
  • iPad 的自适应布局

    我正在关注这篇文章在 ios 中构建自适应布局为 iOS 8 构建自适应用户界面 http www sitepoint com building adaptive user interfaces ios 8 它在 iPhone 上运行良好
  • 如何在 iOS 11 上的 Swift 中获取 FLAC 文件元数据?

    我需要获取 FLAC 文件的元数据 我尝试了以下代码 let item AVPlayerItem url URL fileURLWithPath path let commonMetadata item asset commonMetada
  • 将 Select2(多项选择)与 vue.js 结合使用

    我是 vue 新手 并遵循了他们的 自定义指令 http vuejs org examples select2 html http vuejs org examples select2 html 当仅选择一个项目时 此方法效果很好 但当您选
  • iOS Swift 3 以编程方式将文件复制到 iCloud Drive

    在我的我有文档下载选项 当用户从我的应用程序下载文档时 我需要将其存储到已安装在用户手机中的用户 iCloud Drive 我已在 Web 和 Xcode 中配置了 iCloud 但问题是我无法将文件正确复制到 iCloud Drive 文
  • 应用程序进入后台时 AVPlayer 暂停和播放问题

    如果应用程序变得不活动 活动 当出现某些警报或双击主页按钮时 它可以正常工作 AVPlayer player void applicationWillResignActive UIApplication application player
  • iOS 6 中的模态视图控制器强制横向方向

    我有一个以纵向模式呈现的 UITabBarController 在其中一个选项卡上 我有一个以模态方式显示 UIViewController 的按钮 一个简单的故事板 segue 执行该操作 我希望这个模态视图以横向模式显示 但我无法让它自
  • 在 iOS 7 上需要具有非半透明栏的 WantsFullScreenLayout 行为

    我希望能够让我的视图覆盖整个屏幕 位于导航栏和工具栏后面 并将导航栏和工具栏的半透明属性设置为NO 我想要不透明的条 在 iOS 7 之前 这很容易通过设置来完成wantsFullScreenLayout是 然而 在 iOS 7 中 我找不
  • UITableView 部分始终保持在视图内

    我有一个包含 3 个部分的 UITableView 第 1 节 该部分的标题是 Players 内容恰好是 1 个单元格 包含 1 4 个玩家姓名的水平列表 第 2 节 该部分的标题是 回合 内容是 X 个单元格 每个单元格包含每个玩家在第
  • HTML5 网站在手机屏幕关闭时运行?

    基本上 我的问题与这个话题 https stackoverflow com questions 15465242 html5 mobile app running while phone screen is off但现在已经是 2018 年
  • 如何使用vue.js获取点击时按钮的值

    我在页面上有几个按钮 它们连接到相同的方法webcamSendRequestButton
  • 将 Unmanaged 与 nil 进行比较

    代码是从这篇博客文章复制的 http matthewpalmer net blog 2014 06 21 example ios keychain swift save query http matthewpalmer net blog 2
  • 如何在 Swift 中的标签上制作阴影效果?

    我不知道如何在标签上编写阴影代码 我有一个会改变的乐谱标签 因此无法仅对带有阴影的文本进行Photoshop处理 我需要对其进行编码 以便它始终自动在文本后面有一个模糊的阴影 有人可以举一些例子或提供帮助吗 人们说这是重复的 重复 是关于
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权

随机推荐

  • Tomcat 7 SSL 失败

    我使用 Tomcat 7 并将启用 SSL 连接器 实际上我已经将此解决方案编辑为server xml file
  • QtRuby 可以与 Qt 5 一起使用吗?

    我可以在网上找到的所有内容QtRuby https duckduckgo com q ruby and qt使用 Qt 4 但当前的 Qt 版本是 5 这是否只是文档跟不上现实的问题 Qt 5 可以与 QtRuby 一起正常工作 如果您断言
  • Windows Phone 运行时没有页面转换

    我正在尝试禁用 Windows Phone 运行时的默认页面导航动画 我所能实现的就是将其更改为连续体 十字转门或幻灯片 但我希望页面能够立即更改 因此 当我调用 this Frame navigate 时 它应该导航到新页面 而无需任何动
  • 从 Windows 上下文菜单接收参数

    我以前做过这个 但我一生都不记得该怎么做 在我的资源管理器上下文菜单中 我添加了一个新条目 转到 regedit 转到 HKEY CLASSES ROOT bla bla bla 现在 当我单击我的选项时 我想传递文件路径 文件名等我的应用
  • 如何从服务 C# 捕获控制台输出?

    我们有一个部署到远程客户系统的 C 服务 应用程序将大量 诊断 信息写入控制台 即 Console WriteLine 该服务没有 做它应该做的事 我们如何捕获另一个应用程序中服务的控制台输出 WinForm 版本的应用程序可以在客户位置加
  • Gradle Jacoco 和 JUnit5

    我们刚刚将单元测试移植到 JUnit5 意识到这仍然是相当早期的采用 谷歌上几乎没有任何提示 最具挑战性的是为我们在 jenkins 上使用的 Junit5 测试获取 jacoco 代码覆盖率 因为这花了我几乎一天的时间才弄清楚 所以我想我
  • 注册为 Spring bean 时过滤器调用两次

    我想用 Autowire with a Filter 所以我在中定义我的过滤器SecurityConfig如下 Override protected void configure HttpSecurity http throws Excep
  • 如何在页面之间共享信息

    在开始之前 正如标题中所述 我正在学习 NET MAUI 而且我对此还很陌生 我的问题是我找不到从一个页面到上一个页面共享信息的方法 我想做的是 在 MainPage 中 有一个按钮 按下后会将用户发送到另一个页面 我们将其称为 Login
  • :为什么我无法设置Xamarin.Forms.ListView的SelectedItem属性?

    object lastItem null foreach object item in listView ItemsSource lastItem item if lastItem null listView SelectedItem la
  • 获取文件的最后修改日期/时间作为本地日期/时间字符串

    new File url lastModified 返回一个long等于自纪元以来的毫秒数 基于 GMT 将其转换为一个简单的方法是什么String代表系统本地日期 时间 如果你真的需要看到我的尝试 那就是 但这是一团糟 而且无论如何都是错
  • 如何从 Rails 内部重新启动 Rails?

    好的 所以我想在 Rails 中创建一个操作来重新启动自身 我做了一些搜索并发现 http snippets dzone com posts show 5002 http snippets dzone com posts show 5002
  • 无法从 Metro 风格应用程序获取可用磁盘空间

    我正在编写一个 Metro 风格的应用程序 想要确定托管用户音乐库的驱动器的可用存储容量 我想在磁盘上没有剩余空间或剩余空间很少的情况下禁用某些应用程序功能 我使用 P Invoke 调用 GetDiskFreeSpaceExW 并收到错误
  • 如何计算(A*B)%C? [复制]

    这个问题在这里已经有答案了 有人可以帮我如何计算吗 A B C where 1 lt A B C lt 10 18在C 中 没有big num 只是一种数学方法 从我的脑海中浮现出来 未经广泛测试 typedef unsigned long
  • 应如何聚合公开子实体的信息?

    从这个问题跟进实体是否应该有方法 如果有 如何防止它们在聚合之外被调用 https stackoverflow com questions 51907447 should entity have methods and if so how
  • 从 GNU Octave 中的矩阵中删除一列

    在 GNU Octave 中 我希望能够从矩阵中删除特定的列 为了一般性 我还希望能够从矩阵中删除特定行 假设我有这个 mymatrix eye 5 mymatrix Diagonal Matrix 1 0 0 0 0 0 1 0 0 0
  • 合并 Pig 中的两行

    我想为下面的查询编写一个猪脚本 输入是 ABC DEF GHI JKL MNO PQR STU VWX 输出应该是 ABC DEF GHI JKL MNO PQR STU VWX 有人可以帮我吗 使用土猪很难解决这个问题 一种选择是下载da
  • (量角器)检查单击时是否禁用输入?

    我有两个输入字段 用户名和密码以及一个微调按钮 当我单击此微调按钮时 这两个输入字段将被禁用 并且我将被重定向到另一个页面 我正在编写一个端到端测试来检查这些输入字段是否被禁用 element by model username sendK
  • 如何按不同时区的年月日进行聚合

    我有一个 MongoDB 它以 UTC 格式存储日期对象 好吧 我想按不同时区 CET 的年 月 日执行聚合 这样做对于 UTC 来说效果很好 BasicDBObject group id new BasicDBObject id new
  • 为什么 Big Query 远程函数无法激活超过 60 个云函数实例?

    我已经开始使用远程功能 https cloud google com bigquery docs reference standard sql remote functions https cloud google com bigquery
  • 有没有办法在 iOS 上自动更新(或只是清除缓存)PWA?

    我一直在 iOS 上努力尝试一些在 Android 上可以轻松运行的东西 让我的 PWA 在有新版本时自动更新 我根本不确定这在 iOS 上是否可行 我使用 vue js 和 Quasar 来构建我的应用程序 一切都可以在 Android