微软的Code Push、Ionic官方的Ionic Live Updates都可以用来动态更新ionic项目,但是在国内都不太稳定,原因如下:
Code Push使用的是微软的azure
来存放更新包,Ionic Live Updates使用Amazon的aws
来存放更新包,然而这2个云服务在国内访问都不稳定。
cordova-hot-code-push
- 允许我们将更新包放在自己的服务器上
- 它通过对比文件的hash值,如果hash值变了,则表示该文件有更新,需要重新下载
- 如果有新增加的文件,也下载
- 如果远程配置文件中的
release
跟app中的不一样,则需要更新
// 配置文件chcp.json
{
"update": "start",
"content_url": "http://xxxx/,
"release": "2017.04.18-17.23.22"
}
在我个人看来,上面第4条规则是不合理的:如果你程序包中的release
是最新的,但你忘记发布最新的更新包到网站上去,就会导致app去下载旧的更新包。
它直接比较字符串是否相等来判断是否需要更新,而我希望的是:比较release
字符串代表的日期哪个是最新的就用哪个。
所以我fork的它的源代码,修改了下逻辑:将原来按release
字符串是否相等来判断是否需要更新 修改为远程 release
代表的日期是否比app中的新,如果新则表示需要更新。
同时我也添加了cordova的hook,每次build时都自动生成最新的配置文件(chcp.json最新时间配置文件,chcp.manifest文件hash值的配置文件),不用每次手动更新配置文件。
未完待续