梳理思路:
1.獲取線上App版本號和當前App版本號
2.比對版本號,判斷是否資源在線升級更新
3.是否下載最新安裝包[可以靜默下載或用戶觸發]
4.是否執行資源在線升級更新[可以主動或用戶觸發]
5.是否立即重啟生效[可以主動或用戶觸發]
關鍵代碼:
1 //通過接口請求,獲取線上的版本號 2 var checkUrl= "2.0.0" //通過接口請求,獲取線上的版本號。此處默認2.0.0 3 // 獲取當前版本號 4 function checkUpdate(){ 5 plus.runtime.getProperty(plus.runtime.appid,function(inf){ 6 wgtVer=inf.version; 7 console.log("當前應用版本:"+wgtVer); 8 if(compareVersion(wgtVer, checkUrl)){ // 判斷當前版本是否需要更新 9 plus.nativeUI.confirm('發現新版本'+checkUrl+'是否下載', function(e){ // 此方法請在plusReady()完成后 10 if(e.index>0){ 11 plus.nativeUI.toast('升級包下載中...'); 12 downWgt(); // 下載升級包 13 } 14 }, 'HelloH5', ['取消','確定']); 15 } 16 }); 17 } 18 //版本比較 19 function compareVersion( ov, nv ){ // ov為本地歷史版本,nv為當前線上版本 20 console.log(ov, nv) 21 if ( !ov || !nv || ov=="" || nv=="" ){ 22 return false; 23 } 24 var b=false, 25 ova = ov.split(".",4), 26 nva = nv.split(".",4); 27 for ( var i=0; i<ova.length&&i<nva.length; i++ ) { 28 var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn); 29 if ( nn>no || sn.length>so.length ) { 30 return true; 31 } else if ( nn<no ) { 32 return false; 33 } 34 } 35 if ( nva.length>ova.length && 0==nv.indexOf(ov) ) { 36 return true; 37 } 38 } 39 // 下載wgt文件 40 var wgtUrl="http://www.vitian.vip/upload/H5D6C9AEA.wgt"; // 線上版本在線更新的.wgt文件路徑 41 function downWgt(){ 42 // plus.nativeUI.showWaiting("下載wgt文件..."); 43 plus.downloader.createDownload( wgtUrl, {filename:"_doc/update/"}, function(d,status){ 44 if ( status == 200 ) { 45 console.log("下載wgt成功:"+d.filename); 46 plus.nativeUI.confirm('升級包下載完成,是否安裝最新版本?', function(e){ 47 if(e.index>0){ 48 installWgt(d.filename); // 安裝wgt包 49 } 50 }, 'HelloH5', ['取消','確定']); 51 52 } else { 53 console.log("下載wgt失敗!"); 54 // plus.nativeUI.alert("下載wgt失敗!"); 55 } 56 // plus.nativeUI.closeWaiting(); 57 }).start(); 58 } 59 // 更新應用資源 60 function installWgt(path){ 61 console.log(path) 62 plus.nativeUI.showWaiting("安裝升級文件..."); 63 plus.runtime.install(path,{},function(){ 64 plus.nativeUI.closeWaiting(); 65 console.log("安裝wgt文件成功!"); 66 // 是否立即重啟 67 plus.nativeUI.confirm('應用資源更新完成,是否立即重啟生效?', function(e){ 68 if(e.index>0){ 69 plus.runtime.restart(); 70 } 71 }, 'HelloH5', ['取消','確定']); 72 // plus.nativeUI.alert("應用資源更新完成!",function(){ 73 // 74 // 75 // }); 76 },function(e){ 77 plus.nativeUI.closeWaiting(); 78 console.log("安裝wgt文件失敗["+e.code+"]:"+e.message); 79 plus.nativeUI.toast("安裝wgt文件失敗["+e.code+"]:"+e.message); 80 }); 81 } 82 // 用戶主動除非檢測版本更新 83 function isCheckUpdate(){ 84 plus.runtime.getProperty(plus.runtime.appid,function(inf){ 85 wgtVer=inf.version; 86 console.log("當前應用版本:"+wgtVer); 87 console.log(compareVersion(wgtVer, checkUrl)) 88 if(compareVersion(wgtVer, checkUrl)){ 89 plus.nativeUI.confirm('發現新版本'+wgtVer+'是否下載', function(e){ 90 if(e.index>0){ 91 plus.nativeUI.toast('升級包下載中...'); 92 downWgt(); // 下載升級包 93 } 94 }, 'HelloH5', ['取消','確定']); 95 } else { 96 // plus.nativeUI.alert("當前應用版本為最新版本"); 97 plus.nativeUI.toast('當前應用版本為最新版本'); 98 } 99 }); 100 }