大家都知道,最近苹果对热推送这块打击真是严厉呀,搞得ios都不敢用热推送了,好在安卓还比较开放,暂且不评论此事,下面我们看看什么是热更新吧。
1,首先了解什么是热更新
我们平时每次要更新一个版本都需要到应用商店去下载,但是热更新就不需要了,你只需要在打开app的时候点击更新就可以了,这从用户体验角度上来讲,还是很不错的。
2,热更新机制
每一个Cordova 项目都有一个www目录, 这里存放所有的web内容. 当cordova build执行后 ,www里的内容会拷贝到对应platform的www目录下:
安卓:platforms/android/assets/www.
iOS:platforms/ios/www.
于是这些文件被打包进了app. 我们不能更新安装包里的这些文件, 因为它们是只读的. 正因为如此,所以我们要在app第一次启动的时候,将内置的web内容(www目录)复制到外部存储. 我们不想在拷贝过程中阻塞ui,我们还是会先加载app内置的index.html. 但是下一次启动或更新,我们就从外部存储加载index.html。但是如果你的app外壳需要增加新的cordova插件或者原生功能 - 你必须要重新上架外壳app到store商店。 还有,增加外壳 app 的build版本号 (App Store 或 Google Play强制的),下次启动,插件检查外壳app版本号是否变化, 如果变了 - 会重新拷贝内置web内容(www目录)到外部存储。
开发app的时候,你可能会困惑: 改了一些文件, 重新启动了app - 但却看到的是旧的页面. 现在你知道原因了: 插件用的是旧版本的web内容(外部存储中). 若要清除缓存,你需要:
(1)卸载app, 执行cordova run.
(2)增加外壳app版本号,强制插件重新安装www目录. 更改外壳app版本号请设置config.xml文件的android-versionCode和ios-CFBundleVersion.
(3)安装本地开发扩展,让它帮你处理版本号问题. 每次build他会自动帮你app的build版本号加1,不需要你手动更改
3,热更新流程图
4,cordova的热更新插件
cordova plugin add cordova-hot-code-push-plugin
当然,你需要安装一个热更新的客户端
npm install -g cordova-hot-code-push-cli
5,热更新使用
当了解了原理,安装了插件,我们就可以使用了,使用方法非常简单,我们分本地测试和线上来讲解:
(1)线上
只需要执行cordova-hcp build,就会生成两个文件chcp.json和chcp.manifest,对比两个文件的时间戳即可知道哪些文件被修改过,更新过程中会把这些文件重新加载
(2)本地测试
本地测试需要启动一个服务,只要修改代码保存后,就会自动更新
ionic serve --address your Ip