MUI熱更新

啥都不說,咱直接上代碼android

/**
 * 判斷應用升級模塊,從url地址下載升級描述文件到本地local路徑
 * 
 * 升級文件爲JSON格式數據,以下:
    {
        "appid":"HelloH5",
        "wgtURL": "差量包文件下載地址",
      "apkURL": "apk文件下載地址",
      "ipaURL": "appStore中下載的地址",
       "version": "新版本號,如:1.0.0",
        "iOS": "ios升級標識 1 不須要升級 2 須要升級從appstore中下載 3 進行差量升級",
        "Android": "android升級標識  1 不須要升級 2 須要升級從服務器下載新的apk 2 進行差量升級"
    }
 *
 */
(function(w){
  var checkUrl = ""; // 檢測更新 地址是本身服務器檢測的地址根據本身項目填寫
  var downloadWgtUrl = null; // 升級包目錄
  var downloadApkUrl = null; // 升級包目錄
  var iosURL = null; // 蘋果地址
  var oldVer = null; // 當前應用版本號
  var newVer = null; // 新版本號
  var isios = null; // ios是否須要升級 1 須要升級從appstore中下載 2 能夠使用
  var isandroid = null; // android是否須要升級 1 須要升級從服務器下載新的apk 2 能夠使用
  // plusReady 加載完畢執行
  function plusReady(){
    // 獲取本地應用資源版本號
    plus.runtime.getProperty(plus.runtime.appid,function(inf){
      oldVer = inf.version; 
      checkUpdate();
    });
  }
  // 檢測更新
  function checkUpdate(){
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange=function(){
      switch(xhr.readyState){
        case 4:
          if(xhr.status==200){
            var res = JSON.parse(xhr.responseText);
            // 判斷是否須要升級
            newVer = res.version; // 版本號
            isios = res.ios; // ios是否須要升級 1 不升級 2 appStore升級 3 差量升級
                        iosURL = res.ipaURL;
                        downloadWgtUrl = res.wgtURL;
                        downloadApkUrl = res.apkURL;
            isandroid = res.android; // android是否須要升級 1 不升級 2 apk升級 3 差量升級

            // 監聽應用啓動界面關閉事件
            if(plus.navigator.hasSplashscreen()){ // 啓動頁未關閉
              document.addEventListener("splashclosed", checkOs, false);    
            }else{ //啓動界面已關閉
              checkOs();
            }
          }else{
            console.log("檢測更新失敗!");
          }
          break;
        default:
          break;
      }
    }
    xhr.open('GET',checkUrl);
    xhr.send();
  }
  /**
  * 判斷手機系統檢測升級
  */
  function checkOs(){ 
    var isupdate = compareVersion(oldVer,newVer); // 是否差量升級

        if(!isupdate){
            return false;
        };

    if(plus.os.name == 'Android'){    // Android 用戶    
      if(isandroid == 1){
                return false;
            }else if(isandroid == 2){
                plus.nativeUI.alert( "Plus is ready!", function(){
                    createDownload();
                }, "請升級", "肯定" );
            }else{
                downWgt();
            }
        }else{ // 蘋果用戶
            if(isios == 1){
                return false;
            }else if(isios == 2){
                plus.nativeUI.alert( "Plus is ready!", function(){
                    plus.runtime.openURL( iosURL );
                }, "請升級", "肯定" );
            }else{
                downWgt();
            }
        }
    }
    /**
    * 比較版本大小,若是新版本nv大於舊版本ov則返回true,不然返回false
    * @param {String} ov
    * @param {String} nv
    * @return {Boolean} 
    */
    function compareVersion( ov, nv ){
        if ( !ov || !nv || ov=="" || nv=="" ){
            return false;
        }
        var b=false,
        ova = ov.split(".",4),
        nva = nv.split(".",4);
        for ( var i=0; i<ova.length&&i<nva.length; i++ ) {
            var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);
            if ( nn>no || sn.length>so.length ) {
                return true;
            } else if ( nn<no ) {
                return false;
            }
        }
        if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {
            return true;
        }
    }

    // 下載wgt文件
    function downWgt(){
        plus.nativeUI.showWaiting("更新文件...");
        plus.downloader.createDownload( downloadWgtUrl, {filename:"_doc/update/"}, function(d,status){
            if ( status == 200 ) { 
                console.log("下載wgt成功:"+d.filename);
                installWgt(d.filename); // 安裝wgt包
            } else {
                console.log("下載wgt失敗!");
            }
            plus.nativeUI.closeWaiting();
        }).start();
    }
    // 更新應用資源升級包
    function installWgt(path){
        plus.nativeUI.showWaiting("安裝文件...");
        plus.runtime.install(path,{},function(){
        plus.nativeUI.closeWaiting();
        plus.nativeUI.alert("應用資源更新完成!",function(){
            plus.runtime.restart();
        });
        },function(e){
            plus.nativeUI.closeWaiting();
            plus.nativeUI.alert(JSON.stringify(e));
        });
    }
    /**
    * 建立下載任務 安卓
    */
    function createDownload() {
        var dtask = plus.downloader.createDownload( downloadApkUrl, { filename:'_doc/download/'}, function ( d, status ) {
            // 下載完成
            if ( status == 200 ) { 
                plus.runtime.install(d.filename, {}, function(){
                }, function(DOMException ){
                    console.log(JSON.stringify(DOMException));
                });
            } else {
                alert( "Download failed: " + status ); 
            } 
        });
        dtask.start(); 
    }
    if(window.plus){
        plusReady();
    }else{
        document.addEventListener('plusready',plusReady,false);
    }
})(window);

此代碼只可作參考,具體可根據本身的項目作出調整,若是有更好的方式,請在下方評論ios

相關文章
相關標籤/搜索