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

相关文章
相关标签/搜索