const checkUrl=""; //检测是否更新地址
let downServer = "";
let totalSize = 0;
export const checkUpdate = (wgtVer,lx) => {
uni.showLoading({title: '检测版本...',mask: true});
uni.request({
url: checkUrl,
method:'GET',
success: (result) => {
uni.hideLoading();
if(result.data.code == 0){
var data = result.data.data;
if(wgtVer && data.lastv && (wgtVer<data.lastv)){
var newContent = "当前版本已经废弃,是否下载最新版本?"; //更换标题
uni.showModal({ //提醒用户更新
content: newContent,
confirmText:'是',
cancelText:'否',
success: (res) => {
if (res.confirm) {
if(plus.os.name == 'Android'){
downServer = data.lastsrc;
downAPK(); //APK升级
}else{
plus.runtime.openURL(encodeURI(iosServer))
}
}
}
})
}else if(wgtVer&&data.v&&(wgtVer!=data.v)&&(data.v>wgtVer)){
let newTitle = "发现版本"+data.v+""; //更换标题
let newContent = data.decri.replace(/~/g,"\n"); //更换内容
totalSize = parseInt(data.size)*1024;
uni.showModal({ //提醒用户更新
title: newTitle,
content: newContent,
confirmText:'立即更新',
success: (res) => {
if (res.confirm) {
let type = data.updatelx; //更新方式(1:整包更新、2:wgt更新、3:wgtu更新)
switch(type){ //文件后缀
case 1:
if(plus.os.name == 'Android'){
downServer = data.source;
downAPK(); //APK升级
}else{
plus.runtime.openURL(encodeURI(data.iossrc))
}
break;
case 2:
downServer = data.source;
downWgt(); // 资源包升级
break;
case 3:
downServer = data.source;
diffUpdate(); //差异包升级
break;
}
}
}
})
}else{
if(!lx){
uni.showToast({title: '当前版本:'+wgtVer,icon:"none"});
}
}
}else{
plus.nativeUI.alert(result.data.msg);
}
}
});
}
/** ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 整包升级:适用于大版本,runtime发生变化时(模块、配置、版本等变化)必须使用此方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
export const downAPK = () => {
plus.nativeUI.showWaiting("下载安装包...");
plus.downloader.createDownload( downServer, {filename:"_doc/update/"}, function(d,status){
if ( status == 200 ) {
console.log("下载安装包成功:"+d.filename);
plus.nativeUI.closeWaiting();
plus.runtime.install(d.filename) //安装APK
} else {
plus.nativeUI.closeWaiting();
console.log("下载安装包失败!");
plus.nativeUI.alert("下载安装包失败!");
}
}).start();
}
/** ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 应用资源升级:适用于小版本 。runtime不变,前端页面整体压缩包 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
// 下载wgt文件
export const downWgt = () => {
var wgtWaiting = plus.nativeUI.showWaiting("下载文件...");
var task = plus.downloader.createDownload(downServer, {
filename: "_downloads/"
}, function(d, status) {
if ( status == 200 ) {
console.log("下载wgt成功:"+d.filename);
installWgt(d.filename); // 安装wgt包
} else {
console.log("下载wgt失败!");
plus.nativeUI.alert("下载wgt失败!");
}
wgtWaiting.close();
})
task.addEventListener("statechanged", function(download, status) {
switch (download.state) {
case 2:
wgtWaiting.setTitle("已连接到服务器");
break;
case 3:
setTimeout(function() {
wgtWaiting.setTitle("已下载 " + parseFloat(parseInt(download.downloadedSize) / totalSize * 100).toFixed(2) + "%");
}, 1000);
break;
case 4:
wgtWaiting.setTitle("下载完成");
break;
}
});
task.start();
}
// 应用资源
export const installWgt = (path) => {
plus.nativeUI.showWaiting("安装wgt文件...");
plus.runtime.install(path,{},function(){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("应用资源下载完成!",function(){
plus.runtime.restart();
});
},function(e){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("安装wgt文件失败["+e.code+"]:"+e.message);
});
}
/** ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 应用资源差量升级:适用于小版本下载 。runtime不变,前端页面仅需要下载的部分。↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
export const diffUpdate = () => {
plus.nativeUI.showWaiting("升级中...");
var dtask = plus.downloader.createDownload( downServer, {method:"GET"}, function(d,status){
if ( status == 200 ) {
console.log( "Download wgtu success: " + d.filename );
plus.runtime.install(d.filename,{},function(){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("应用资源wgtu下载完成!",function(){
plus.runtime.restart();
});
},function(e){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert('应用资源wgtu下载失败!'+e.message)
});
} else {
plus.nativeUI.closeWaiting();
plus.nativeUI.alert('应用资源wgtu下载失败!'+ status )
}
} );
dtask.addEventListener("statechanged", function(download, status) {
switch (download.state) {
case 2:
wgtWaiting.setTitle("已连接到服务器");
break;
case 3:
setTimeout(function() {
wgtWaiting.setTitle("已下载 " + parseFloat(parseInt(download.downloadedSize) / totalSize * 100).toFixed(2) + "%");
}, 0);
break;
case 4:
wgtWaiting.setTitle("下载完成");
break;
}
});
dtask.start();
}