需求说明
修复严重bug,新增新的功能点,想要用户全量更新的时候,会在启动app的时候,弹出弹窗让用户强制更新。从而实现版本的统计。
涉及的技术
- 后端接口提供app的安装地址,是否强制更新,最新版本的版本号
- 使用h5的plus.runtime知识点
- 使用uniapp的uni.downloadFileAPI
实现逻辑
- 调用后端接口,判断当前版本号(plus.runtime.getProperty获取)与最近版本号是否一致,不一致则根据flag判断是否需要强制更新。
- 判断是ios还是安卓,ios:t跳转到apple store 安卓:使用uni.downloadFile下载安装包到本地
- 安卓使用plus.runtime.install进行安装,plus.runtime.restart进行重启。
实现代码
//在app.vue的onLaunch生命周期里调用
this.forceUpdate();
//在methods中写入方法
forceUpdate(){
let that = this;
uni.request({
url:url,
method:method,
success:result=>{
if(result.force){ //强制更新
plus.runtime.getProperty(plus.runtime.appid,function(inf){
if(inf.version !== res.version){ //判断版本号是否一致
uni.showModel({
title:"发现新版本",
content:"确认下载更新",
showCancel:false,
success:(res)=>{
if (res.confirm == true) {//当用户确定更新,执行更新
// #ifdef APP-PLUS
if (plus.os.name=="Android") {
uni.showLoading({
title: '更新中……'
})
uni.downloadFile({ //执行下载
url: url, //下载地址
success: downloadResult => { //下载成功
uni.hideLoading();
if (downloadResult.statusCode == 200) {
// #ifdef APP-PLUS
plus.runtime.install( //安装
downloadResult.tempFilePath, {
force: false
},
function(res) {
plus.runtime.restart();
},
function(err){
console.log(err)
}
);
// #endif
}
}
});
}else{ //ios
plus.runtime.openURL(url) //url:app对应的apple store地址
}
// #endif
}
}
})
}
})
}
}
})
}
以上便是实现强制更新的实现方案,同理也可以做app的检查更新。
一直努力向前的芋头呀!加油!
如果错误,欢迎指正~