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

 

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