资源
方案
流程介绍:
1.APP启动 - 调用wgt包检测, 判断是否需要进行热更
1.1 需要更新: 执行下载->安装->更新wgt包版本号->提示并重启
1.2 不需要更新: 无操作
(以上均是静默操作, 不影响APP启动流程)
方案说明:
1.OSS存放wgt包
2.Dcloud账号的云数据库存放wgt/version等配置数据
3.uniApp本地检测wgt包版本号进行比对, 判断后决定是否下载/安装/跳过/更新wgt包本地版本号等
数据库简单结构
{
"version": "1.0.8",// uniApp版本号
"config": {
"ios": {
"app_wx_login": true
},
"android": {
"app_wx_login": true
},
"mini": {
"app_wx_login": false
},
"wgt": {
"tag": 1, //wgt包版本号
"config": {
}
}
}
}
可以看到, 我们在云数据库中配置好
wgt
字段的tag
, APP 通过查数据库中各自对应的app(如1.0.8
)版本,来读取wgt对应的tag版本号, 在进行wgt下的 : 远端tag 与 本地tag 比对( 这里tag的版本号直接使用自然序号即可, 足够用)
通过tag的比对, 进行逻辑处理即可,
注意点
1.安装包提示 WGT安装包中manifest.json文件的version版本不匹配
问题
由于wgt包版本号的维护不依赖于uniapp 版本号, 所以 可以在安装wgt包的时候, 强制忽略版本判断
2.OSS存放wgt包
通过oss存放wgt包
xxxxx/wgt/1/index.wgt
可以看到, 通过读取远端的wgt的tag, 用该tag进行oss地址的拼接, 用于作为下载地址
代码
1.数据库的查询与结果返回, 此处我用vuex来处理. (顺便进行数据库对app的数据缓存)
/**
* 检测wgt包
* appInfo: appInfo,
* wgtLocalTag : 本地wgt包的tag, 如果首次安装或未进行过热更新, tag为null
* 调用:APP初始化时, 调用进行检测
*
*/
checkWgt({
commit }, appInfo) {
let WGT_TAG_FLAG = "wgtTagFlag";
let wgtV = uni.getStorageSync(WGT_TAG_FLAG);
return new Promise((reslove) => {
let db = uniCloud.database();
db.collection("xxxxxconfig")
.where(`version == "${
appInfo.appVersion