/** App更新调用,在App.vue中调用
* 最少字段 {"version":1.0.0,"file":"appUrl"}
* 返回:{"update":true,"file":"appUrl"}
* */
let $updateApp = (CloudAppUrl)=>{
return new Promise((resolve,reject)=>{
//获取本地版本信息
let App = plus.runtime.getProperty(plus.runtime.appid,(info) => {
if(CloudAppUrl.version !== undefined && CloudAppUrl.version !== null){
if(CloudAppUrl.file !== undefined && CloudAppUrl.file !== null){
if(CloudAppUrl.version > info.version){
resolve({"update":true,"file":CloudAppUrl.file})
}
}
}
reject({"update":false})
})
})
}
/** 开始下载更新
* 参数:url地址
* 无返回:直接执行
*/
let $download = (fileUrl)=>{
let options = {
method:'GET',
timeout:10,
retry:1
}
// 创建开始下载
let down = plus.downloader.createDownload(fileUrl,options,function(d,status){
if(status === 200){
// 下载成功以后调用APP安装
plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename,{},{},function(err){
plus.nativeUI.toast("更新程序安装失败")
}))
}else{
plus.downloader.clear()
down.abort()
// 请求失败
plus.nativeUI.toast('更新程序下载失败:'+status)
}
})
try{
// 开始下载
down.start()
// 获取当前下载进度
let showLoadin = plus.nativeUI.showWaiting("开始下载....")
down.addEventListener('statechanged',function(task,status){
// 给下载人物设置一个监听
switch(task.state){
case 1:
showLoadin.setTitle("开始下载.....")
break;
case 2:
showLoadin.setTitle("已连接到服务器")
break;
case 3:
// console.log("当前",task.downloadedSize / task.totalSize * 100)
let pr = parseInt((parseFloat(task.downloadedSize)/parseFloat(task.totalSize)*100))
showLoadin.setTitle('已下载:' +pr+ '%' )
break;
case 4:
plus.nativeUI.closeWaiting()
// 下载完成
break;
}
})
}catch(err){
down.abort()
plus.nativeUI.closeWaiting();
throw new Error("更新程序出现错误")
}
}
// app更新
// 参数为对象:{"version":1.0.0,"file":"appUrl"}
let $updateAppRequest = (updateUrl)=>{
uni.getNetworkType({
success:res=>{
// 当前是否有网络连接
if(res.networkType === 'none'){
console.log('当前无网络连接');
uni.showToast({
icon:'none',
title:'当前无网络连接',
duration:3000
})
}else{
// 判断版本是否需要更新
$updateApp(updateUrl).then((res)=>{
if(res.update){
uni.showModal({
title:'有新版本更新!',
content:'立即更新后才能使用!',
showCancel:false,//隐藏取消按钮
confirmText:'立即更新',
confirmColor:'#576b95',
success:function(){
// 调用下载
$download(res.file)
}
})
}
})
}
}
})
}