骁骑
骁骑
  • 发布:2016-10-12 17:28
  • 更新:2024-06-15 19:20
  • 阅读:7307

iOS平台Widget集成使用wgt/wgtu升级说明

分类:5+ SDK

用户在使用Widget集成时,使用plus.runtime.install API进行5+应用升级时会发现,方法回调升级成功,但是应用重启后加载的依然是老版本的应用。这是因为会用Widget方式集成时调用 PDRCoreAppManager 类 openAppAtLocation方法创建PDRCoreApp对象时需要传入WebApp的保存路径作为参数

一般情况下WebApp的资源是放在原生工程的Pandora/apps目录下,在生成ipa安装包后这个目录下的文件是不能修改。 5+SDK在wgt/wgtu升级后会将资源释放到应用沙盒的~Library目录下,路径为~Library/Pandora/apps/[WebApp的ID]/www目录下,所以需要在调用PDRCoreAppManager 类 openAppAtLocation方法时传入的参数进行调整。

我们知道了问题的原因,下面我们来解决问题。
我们可以通过判断 ~Library/Pandora/apps/[WebApp的ID]/www目录下是否有应用的mainfest.json文件存在的方式判断应用是否升级,如果该文件存在则设置该路径为应用启动路径,否则使用ipa下的Pandora/apps目录下的资源为启动路径

ipa在升级时~Library/Pandora/apps/[WebApp的ID]/www 目录下的内容不会被系统删除,
为了保证升级后不会使用到以前遗留的WebApp资源,建议在WebApp启动时写文件保存当前ipa的版本号,每次启动时判断保存的版本号与当前ipa的版本号是否一致,如果不一致则需要删除~Library/Pandora/apps/[WebApp的ID]/www 目录下的全部内容,这样可以保证使用正确的WebApp资源

4 关注 分享
wenju Trust 向大海 冷月i

要回复文章请先登录注册

jakson

jakson

可不可以这么做?app启动时,读取工程内manifest.json和沙盒内的manifest.json并解析它们,读出版本号,如果沙盒内manifest.json的版本号低于工程内manifest.json的版本号,就删除沙盒内的资源目录。哪个的版本高,就设置哪个的启动目录。
2018-04-17 14:59
4***@qq.com

4***@qq.com

更新完成后,使用plus.runtime.restart()方法后,仍然调用的还是原来的版本,杀掉应用,重启启动就是最新版本了,有没有什么方案可以不用重新启动
2018-03-16 17:18
梁liang

梁liang

回复 m***@163.com :
楼主,ios平台的升级搞好了么。请教下这个方法,谢了
2017-04-17 11:08
m***@163.com

m***@163.com

回复 骁骑 :
你上面的代码已经有检查版本号是否一致并且不一致则删除的步骤了
2016-11-23 11:10
m***@163.com

m***@163.com

回复 天才书生 :
quit这个方法只能适用于ios低版本的,对于高版本是没有效果,所以我直接提示用户自己手工重启APP
2016-11-23 11:07
骁骑

骁骑 (作者)

回复 天才书生 :
ipa在升级时~Library/Pandora/apps/[WebApp的ID]/www **目录下的内容不会被系统删除,
为了保证升级后不会使用到以前遗留的WebApp资源,建议在WebApp启动时写文件保存当前ipa的版本号,每次启动时判断保存的版本号与当前ipa的版本号是否一致,如果不一致则需要删除~Library/Pandora/apps/[WebApp的ID]/www** 目录下的全部内容,这样可以保证使用正确的WebApp资源
2016-11-23 11:07
天才书生

天才书生

其实这个里面有BUG,不是代码BUG,而是逻辑上的,比如我使用资源更新文件后,Library里面就会有更新的资源文件,APP启动时,程序会检测到这个目录不为空且存在manifest.json文件,就会直接使用该目录,但这时候如果我使用xcode装了一个新版本的ipa文件,这时候并不会使用ipa内文件,还是使用原本Library里面的文件,相对于ipa内的文件,已是旧文件了
2016-11-22 17:43
天才书生

天才书生

回复 m***@163.com :
看来目前是没办法了,这个就不要用restart,直接quit,但要提醒用户手工重启APP
2016-11-22 17:40
m***@163.com

m***@163.com

使用了这个方法,但是更新后,使用plus.runtime.restart()方法后就跟原本的没区别; 然后退出应用再重新开启应用,发现数据没有加载到,请问是什么原因呢?
2016-11-18 10:38