uniapp 熱更新


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章