微軟的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值的配置文件),不用每次手動更新配置文件。
未完待續