打包前,在 manifest.json 文件中更新版本号
在 HbuilderX 云打包app,打包完成,控制台会给出【 下载链接 】,点击链接 或者 复制 链接到浏览器,会自动下载app安装包,将这个下载下来的安装包放到服务器上,再进行更新即可。
App.vue文件中加入下面代码,进行app版本升级更新
<script>
export default {
onLaunch: function() {
// console.log('App Launch')
// 获取 manifest.json 的信息
plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
// 获取 app的version
let appversion = wgtinfo.version;
// 存缓存 版本号
try {
uni.setStorageSync('appversion', appversion);
} catch (e) {}
console.log( "appversion:" + appversion );
} );
// 更新版本接口
var server = "……"; // 版本接口api
// 取缓存 版本号
const v = uni.getStorageSync('appversion');
uni.request({
url: server,
data: v,
success: (res) => {
console.log('res',res);
console.log('appversion'+v);
if (res.statusCode == 200 && v < res.data.msg.version) { // 对比版本,进行更新升级
uni.showModal({ //提醒用户更新
title: "更新提示",
content: res.data.msg.content,
success: (res) => {
if (res.confirm) {
// 更新操作,resetURL 是app更新的接口地址
plus.runtime.openURL(resetURL);
}
}
})
}
}
})
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
},
}
</script>
<style lang="scss" scoped>
</style>
显示下载进度的版本,文件 App.vue
<script>
export default {
data(){
return {
curVersion:'1.0.0'
}
},
onLaunch: function() {
// console.log('App Launch')
//#ifdef APP-PLUS
this.checkUpdate();
// #endif
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
},
methods: {
// 版本升级
//# ifdef APP-PLUS
checkUpdate(){
// 获取manifest.json 的信息
plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
this.curVersion = wgtinfo.version;
console.log( "this.curVersion:" + this.curVersion );
} );
// 更新版本接口
var server = "http://t.heijinka.vip/api/version";
var that = this;
uni.request({
url: server, //请求更新地址
data: that.curVersion,
success(res) {
if (res.statusCode == 200 && that.curVersion < res.data.msg.version) {
uni.showModal({
title: '版本更新' + res.data.msg.version,
content: res.data.msg.content,
confirmText: "更新",
// showCancel: !res.forceUpdate,
success: function(e) {
if (e.confirm) {
if (plus.os.name.toLowerCase() == 'ios') {
// 跳转到下载页面
plus.runtime.openURL(res.data.msg.downloadUrl)
} else {
that.createDownload(res.data.msg.downloadUrl);
}
} else {
//取消
}
}
});
} else {
uni.showModal({
title: '提示',
content: '已是最新版本',
showCancel: false
});
}
},
})
},
createDownload(url){
var dtask = plus.downloader.createDownload(url, {},
function(d, status) {
uni.showToast({
title: '下载完成',
mask: false,
duration: 1000
});
//console.log(dtask);
// 下载完成
console.log('status: '+status);
if (status == 200) {
console.log('下载成功:'+d.filename);
console.log('plus.io.convertLocalFileSystemURL(d.filename): '+plus.io.convertLocalFileSystemURL(d.filename))
plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {}, function(success) {
uni.showToast({
title: '安装成功',
mask: false,
duration: 1500
});
}, function(error) {
uni.showToast({
title: '安装失败-01',
mask: false,
duration: 1500
});
})
} else {
uni.showToast({
title: '更新失败-02',
mask: false,
duration: 1500
});
}
});
try {
dtask.start(); // 开启下载的任务
var prg = 0;
var showLoading = plus.nativeUI.showWaiting("正在下载"); //创建一个showWaiting对象
dtask.addEventListener('statechanged', function(task,status) {
// 给下载任务设置一个监听 并根据状态 做操作
switch (task.state) {
case 1:
showLoading.setTitle("正在下载");
break;
case 2:
showLoading.setTitle("已连接到服务器");
break;
case 3:
prg = parseInt((parseFloat(task.downloadedSize) / parseFloat(task.totalSize)) * 100 );
showLoading.setTitle(" 正在下载" + prg + "% ");
break;
case 4:
plus.nativeUI.closeWaiting();
//下载完成
break;
}
});
} catch (err) {
plus.nativeUI.closeWaiting();
uni.showToast({
title: '更新失败-03',
mask: false,
duration: 1500
});
}
},
//#endif
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
@import "uview-ui/home.scss";
</style>