实现思路:将打包好的apk安装包放到后台服务器,通过后台返回更新版本的版本号和当前版本号做比较,不同则提示有新版本需要更新,下载地址由后台返回。下面是前端部分的代码实现。
创建check.js文件
import api from './api.js'
function check(param = {}) {
// 合并默认参数
param = Object.assign({
title: "检测到有新版本!",
content: "请升级app到最新版本!",
canceltext: "暂不升级",
oktext: "立即升级",
},
param
);
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
let platform = plus.os.name.toLocaleLowerCase();
api.request({
url: api.getVersionList,
method: "GET",
success: (result) => {
let data = result.data.length ? result.data[0] : null;
if (widgetInfo.version === data.versionCode) {
return;
}
if (result.statusCode == 200) {
if (platform == "ios") {
// 如果是ios,则跳转到appstore
plus.runtime.openURL(result.data.iosUrl);
return;
}
// android进行如下操作
uni.showModal({
title: param.title,
content: data.versionRemark ? data.versionRemark : param.content,
showCancel: data.force ? false : true,
confirmText: param.oktext,
cancelText: param.canceltext,
success: (res) => {
if (!res.confirm) {
//取消升级
// plus.runtime.quit(); 不升级退出app加上这行代码
return
}
if (data.shichang === 1) {
//去应用市场更新
plus.runtime.openURL(data.shichangurl);
plus.runtime.restart();
} else {
// 创建下载任务
var dtask = plus.downloader.createDownload(
data.versionUrl, {
filename: "_downloads/",
},
function(d, status) {
// 下载完成
if (status == 200) {
plus.runtime.install(
d.filename, {
force: true,
},
function() {
//进行重新启动;
plus.runtime.restart();
},
(e) => {
uni.showToast({
title: "安装升级包失败:" +
JSON
.stringify(
e),
icon: "none",
});
}
);
} else {
this.tui.toast(
"下载升级包失败,请手动去站点下载安装,错误码: " +
status
);
}
}
);
let view = new plus.nativeObj.View("maskView", {
backgroundColor: "rgba(0,0,0,.6)",
left: plus.screen.resolutionWidth / 2 - 45 +
"px",
bottom: "80px",
width: "90px",
height: "30px",
});
view.drawText(
"开始下载", {}, {
size: "12px",
color: "#FFFFFF",
}
);
view.show();
dtask.addEventListener(
"statechanged",
(e) => {
if (e && e.downloadedSize > 0) {
let jindu = (
(e.downloadedSize / e
.totalSize) *
100
).toFixed(2);
view.reset();
view.drawText(
"下载进度:" + jindu + "%", {}, {
size: "12px",
color: "#FFFFFF",
}
);
}
},
false
);
dtask.start();
}
},
});
}
},
});
});
}
export default {
check,
};
在app的主页面调用检测更新
import checkappupdate from '@/utils/check.js';
onLoad(){
checkappupdate.check({
title: '检测到有新版本!',
content: '请升级app到最新版本!',
canceltext: '暂不升级',
oktext: '立即升级'
})
}