uniapp整包更新
更新时间:2020-06-28 13:42
一.需求场景
App用户想在系统发布新版本之后,自动更新到最新的版本.
二.解决方案
1.解决思路
1.1用户在进入app时,提示用户更新到最新版本.
1.2android用户确定更新到最新版,则自动下载最版本的安装包;
1.3android用户下载完最新的安装包之后,跳转到安装界面;
1.4iOS用户确定更新到最新版本,则跳转到App Store下载更新页面;
2.修改App.vue中的代码
2.1在onShow方法中添加如下代码:
// #ifdef APP-PLUS
updateApp(this.$api.HOST, this.$api.UPDATEDAPP);
// #endif
说明:
1.这里需要用到条件编译,因为只有app版本才会有自动更新的功能.
2.调用的方法传入两个参数,第一个是主机地址,第二个是更新接口,这两个参数可以合成一个.
2.2在添加app更新方法和app下载方法
更新方法:
/**
* Title: 更新app
* Description: 更新,下载新版本app
* Param: 无
* Return: 无
*/
function updateApp(HOST, URL) {
let oldVersion = plus.runtime.version;
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
uni.request({
url: HOST + URL,
success(res) {
let newVersion = res.data.data.version;
if (newVersion > oldVersion) {
if (plus.os.name == "Android") {
uni.showModal({
title: "温馨提示",
content: "检测到新版本,是否更新?",
confirmText: "立即更新",
cancelText: "下次再说",
success(res) {
if (res.confirm == true) {
downloadApp(HOST);
}
}
});
} else {
uni.showToast({
title: "新版本已发布,请到App Store下载最新版",
icon: "none",
duration: 3000
});
}
}
}
});
});
}
下载方法:
/**
* Title: 下载app
* Description: 更新,下载新版本app
* Param: 无
* Return: 无
*/
function downloadApp(HOST) {
uni.showLoading({
title: "正在下载中,预计1-3分钟,请稍后..."
});
const downloadTask = uni.downloadFile({
url: HOST + "apk/e10adc3949ba59abbe56e057f20f883e.apk",
success(res) {
uni.hideLoading();
uni.showToast({
title: "下载完成"
});
setTimeout(function() {
plus.runtime.openFile(
res.tempFilePath
);
}, 2000);
}
});
}
说明:
1.更新方法和下载方法都要放在条件编译中,// #ifdef APP-PLUS // #endif.
2.这里的iOS仅给出了更新提示,可以根据自己的需要修改成跳转到App Store商店的地址.
3.这里之所以使用的uni.showLoading的进度提示,是因为调用h5+的原生进度条真机实测过于卡顿,效果很差.
以上就是uniapp整包更新的解决方案.