前言
组件库环境:uview 1x
检测是安卓还是ios
首先在onload中检测是安卓还是ios,ios的话 要做啥操作另外修改一下,这里主要是针对apk的更新
onLoad() {
//检测更新
const type = uni.getSystemInfoSync().platform
console.log(type, '机型')
type == 'ios' ? '' : this.checkUpdates()
},
版本号对比
然后就是检测版本是否是最新,这里我说一下 plus.runtime.version
这玩意 在h5中不起作用,可以去看看官网的解释,在h5中需要使用下面代码块包裹下,不然报错
// #ifdef APP-PLUS
// #endif
然后就是他获取到的版本就是manifest.json
文件中配置的版本信息(13.x.13)中间那一位,下边做了一个截取拿到的就是 打包发布配置的那一个版本号,对比版本号的时候需要一个接口,返回最新的版本号码,跟当前环境获取到的plus.runtime.version
版本信息比较,一致的话就不用更新
我这接口返回的值,就用到最新apk下载地址和版本号,版本号要和你manifest.json
文件中写的一致
直接调用默认浏览器打开下载地址的方法
plus.runtime.openURL('下载url')
downloadNum
这玩意是下载进度条的数量,页面展示进度条的代码(uview 版本 1x)
showdownLine
这玩意是控制是否显示下载进度条,只有点了更新之后才会显示进度条
完整检测更新和下载文件代码
<view class="progress" v-if="showdownLine">
<u-line-progress :striped="true" :percent="downloadNum" :striped-active="true"></u-line-progress>
</view>
checkUpdates() {
//调用接口检查是否可以更新
// #ifdef APP-PLUS
const localVersion = plus.runtime.version.split('.')[1]
console.log(localVersion)
this.$u.get(`/api-sys/sys/sysVersion/getVersion`, {}).then(res => {
console.log(res);
if (res.code == 200) {
const {
version,
androidUrl,
updateContent
} = res.data
if (localVersion == version) {
console.log('不需要更新')
} else {
uni.showModal({ //提醒用户更新
title: "更新提示",
content: '是否更新',
success: (res) => {
if (res.confirm) {
this.doUpData(androidUrl)
this.showdownLine = true
// plus.runtime.openURL(androidUrl)
}
}
})
}
} else {
this.$u.toast(res.msg)
}
});
// #endif
},
doUpData(Url) {
uni.showLoading({
title: '更新中……'
})
const downloadTask = uni.downloadFile({ //执行下载
url: Url, //下载地址
timeout: 1000 * 30, //30秒超时时间
success: downloadResult => { //下载成功
console.log(downloadResult)
this.showdownLine = false
uni.hideLoading();
if (downloadResult.statusCode == 200) {
plus.runtime.install( //安装软件
downloadResult.tempFilePath, {
force: true
},
function(res) {
plus.runtime.restart();
}
);
}
},
fail: err => {
uni.hideLoading();
this.showdownLine = false
this.$u.toast(err.errMsg)
console.log(err)
},
complete: com => {
console.log(com)
}
});
// 下载进度
downloadTask.onProgressUpdate(res => {
// this.$u.toast(res.progress)
this.downloadNum = res.progress
// console.log('下载进度' + res.progress);
// console.log('已经下载的数据长度' + res.totalBytesWritten);
// console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);
// 满足测试条件,取消下载任务。
// if (res.progress > 50) {
// downloadTask.abort();
// }
});
},
data部分
data() {
return {
downloadNum: null,
showdownLine: false,
}
},