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();
}