最近开发app项目,为了实现版本的自动更新,简单进行一下记录
首先,版本更新,肯定需要有个版本比对的文件,因此远程上要先有最新版本的信息记录,包含版本号和下载地址(看需求进行添加其他信息)
这个更新仅限制于安卓端, IOS是禁止自动更新的, 因此在触发getVersion()版本号时,记得使用uni.getSystemInfoSync().platform 区分一下,在安卓系统下再执行判断版本。
getVersion() {
//#ifdef APP-PLUS
// 获取本地应用资源版本号
plus.runtime.getProperty(plus.runtime.appid, (info) => {
uni.request({
// 环境更新信息
url:'***********', // 自身记录版本信息的地址
success: (res) => {
if (res.statusCode == 200) {
if (res.data.isForceVersion) {
// 当发现版本信息不一致时,需要弹出下载弹窗、和新版本信息
if (Number(res.data.versionCode) != info.versionCode) {
// 这个是判断是否弹出下载弹窗
this.downloadShow = true
this.downloadData = res.data
}
}
}
}
})
})
//#endif
},
// 弹窗下载按钮事件
renew() {
// 进度条
this.hasProgress = true
uni.showLoading({
title: "更新中"
})
uni.downloadFile({
url: this.downloadData.url, // 这个是最新版本apk包的地址(在上面获取的新版本信息中apk的地址)
success: (res) => {
uni.hideLoading();
if (res.statusCode === 200) {
plus.runtime.install(res.tempFilePath, {
force: true
}, _res => {
plus.runtime.restart();
uni.hideToast();
uni.hideLoading()
this.hasProgress = false
});
} else {
this.hasProgress = false
uni.hideLoading()
uni.showToast({
title: "下载失败!",
icon: "none",
duration: 800,
});
}
},
fail: (err) => {
uni.showToast({
title: "下载失败!",
icon: "none",
duration: 800,
});
uni.hideLoading()
}
});
},