关于uniapp app端更新的两种方式:
- 全量更新(apk)
- 增量更新(wgt包)
注意事项
- 真机测试情况下获取的appId为“HBuilder”,不是我们在manifest.json中配置的appId,需在打包安装后才能获取配置的appId
- 每次打包的版本号需大于上次的版本号
- 增量包安装后需通过“plus.runtime.restart()”api重启app才生效
- plus.runtime.getProperty方法只在app下才生效,小程序方面也有专门的api
下载进度可视化
- 通过onProgressUpdate()方法可获取下载的进度,已下载德文件大小,总量大小,将数据渲染出来就好
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid,(wgtinfo)=>{ //通过api获取appId,版本号
const params = {}
params.appId = wgtinfo.appid //appid
params.version = wgtinfo.version //版本号
this.post('**********',{...params}).then(res => { //请求接口,是否更新
if(res.data.updateFlag === '1') { //判断是否需要更新
if(res.data.updateType === '1') { //增量包更新
var downloadTask = uni.downloadFile({
url: res.data.downloadUrl, //下载地址,必传
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, { //安装api
force: false
}, function() {
console.log('install success...');
plus.nativeUI.showWaiting("更新完成");
setTimeout(() => {
plus.nativeUI.closeWaiting();
plus.runtime.restart(); //重启app
},1500)
}, function(e) {
console.error('install fail...');
});
}
},
fail: (item => {
console.log(item)
})
})
downloadTask.onProgressUpdate(item => {
if(item.progress <100) {
plus.nativeUI.showWaiting("正在下载" + item.progress + '%');
}else if(item.progress >= 100) {
plus.nativeUI.closeWaiting();
}
})
}else if(res.data.updateType === '2') { //全量包更新
uni.showModal({ //提醒用户更新modal框
title: "更新提示",
content: res.data.note,
success: (item) => {
if (item.confirm) {
plus.runtime.openURL(res.data.downloadUrl);
}
}
})
}
}
})
})
// #endif