uniapp版本更新 热更新及自然更新
程序员文章站
2024-01-22 11:23:46
...
哈哈哈 今天来记录下uniapp的更新版本方式
首先分为热更新和自然更新
1.热更新是指强制更新 就是必须更新 当系统出现bug时 或者有新增功能影响使用时 使用热更新
2.自然更新则是 可以选择的更新 点击下载按钮则下载 点击取消则放弃更新
好啦 接下来上代码吧
- 在App.vue页面
可以卸载onLaunch里面 也可以卸载methods中然后在onLaunch调用 我用的是后一种方法
methods: {
...mapMutations(['login']),//这里不需要的可注释掉
/**
* 安卓应用的检测更新实现
*/
AndroidCheckUpdate: function() {
var _this = this;
var version = 101;
// console.log(version);
uni.request({
//请求地址,设置为自己的服务器链接
// url: '*************/index.php/System/version', //这是完整域名
// 也可以将域名写在仓库里面 然后这里面调用 以防换域名的时候来回更改
url: _this.baseUrl +'index.php/System/version',
method: 'POST',
data: {},
success: resMz => {
console.log("版本号信息",resMz.data);
//返回的版本号
var server_version = resMz.data.data.version;
//返回的时间戳
var currTimeStamp = resMz.data.data.timestamp;
//返回的状态码 0 是自然更新 1是强制更新
var status = resMz.data.data.update_status;
console.log("本地版本号version= "+ version + ",更新码="+status + ",后台版本号="+server_version+ ",时间戳"+ currTimeStamp);
if (status == 1) {
//强制更新 又称为热更新 系统出现大bug 必须更新
_this.MustcheckVersionToLoadUpdate(server_version,version);
} else if (status == 0) {
//自然更新
uni.getStorage({
key: 'tip_version_update_time',
success: function(res) {
var lastTimeStamp = res.data;
var tipTimeLength = 0;
console.log( "时间间隔",tipTimeLength);
let cha = lastTimeStamp + tipTimeLength - currTimeStamp;
console.log("本地时间戳=",lastTimeStamp);
console.log("时间戳差值",cha);
if (lastTimeStamp + tipTimeLength > currTimeStamp) {
//这里不用理会
console.log('当后台时间戳大于本地时间戳才会进入');
} else {
console.log('立即更新');
//重新设置时间戳
_this.setStorageForAppVersion(currTimeStamp);
//进行版本型号的比对 以及下载更新请求
console.log(server_version, version);
_this.checkVersionToLoadUpdate(server_version, version);
}
},
fail: function(res) {
_this.setStorageForAppVersion(currTimeStamp);
}
});
}
},
fail: () => {},
complete: () => {}
});
},
/**
* //设置应用版本号对应的缓存信息
* @param {Object} currTimeStamp 当前获取的时间戳
*/
setStorageForAppVersion: function(currTimeStamp) {
uni.setStorage({
key: 'tip_version_update_time',
data: currTimeStamp,
success: function() {
console.log('setStorage-success');
}
});
},
/**
* 进行版本型号的比对 以及下载更新请求 自然更新
* @param {Object} server_version 服务器最新 应用版本号
* @param {Object} curr_version 当前应用版本号
*/
checkVersionToLoadUpdate: function(server_version, curr_version) {
if (server_version > curr_version) {
uni.showModal({
title: '版本更新',
content: '有新的版本发布,是否立即进行新版本下载?',
confirmText: '立即更新',
cancelText: '取消',
success: function(res) {
if (res.confirm) {
uni.showToast({
icon: 'none',
mask: true,
title: '有新的版本发布,程序已启动自动更新。',
duration: 5000
});
//设置 最新版本apk的下载链接 这是固定的 每次把包放在这个链接里里面即可 由后端制作
var downloadApkUrl = 'http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200616/20200616/159228906014ee22eaba297944c96afdbe5b16c65b.apk';
console.log(downloadApkUrl);
plus.runtime.openURL(downloadApkUrl);
} else if (res.cancel) {
console.log('下次一定');
}
}
});
}
},
/**
* 进行版本型号的比对 以及下载更新请求 自然更新
* @param {Object} server_version 服务器最新 应用版本号
* @param {Object} curr_version 当前应用版本号
*/
MustcheckVersionToLoadUpdate: function(server_version, curr_version) {
if (server_version > curr_version) {
uni.showModal({
title: '版本更新',
content: '有新的版本发布,检测到您当前为Wifi连接,是否立即进行新版本下载?',
confirmText: '立即更新',
showCancel:false,
success: function(res) {
if (res.confirm) {
uni.showToast({
icon: 'none',
mask: true,
title: '有新的版本发布,程序已启动自动更新。',
duration: 5000
});
//设置 最新版本apk的下载链接 这是固定的
var downloadApkUrl = 'http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200616/20200616/159228906014ee22eaba297944c96afdbe5b16c65b.apk';
console.log(downloadApkUrl);
plus.runtime.openURL(downloadApkUrl);
}
}
});
}
},
onLaunch: function() {
this.AndroidCheckUpdate();
}
另外参考了一个大神的内容 下面附上链接哦
https://www.jianshu.com/p/541c286f69ea