您现在的位置: 首页 > 开发编程 > HBuilder教程 > 正文

MUI热更新代码分享

作者:admin来源:网络浏览:时间:2018-01-27 22:22:10我要评论
分享到
MUI热更新代码分享


  1. /** 
  2.  * 判断应用升级模块,从url地址下载升级描述文件到本地local路径 
  3.  *  
  4.  * 升级文件为JSON格式数据,如下: 
  5.     { 
  6.         "appid":"HelloH5", 
  7.         "wgtURL": "差量包文件下载地址", 
  8.       "apkURL": "apk文件下载地址", 
  9.       "ipaURL": "appStore中下载的地址", 
  10.        "version": "新版本号,如:1.0.0", 
  11.         "iOS": "ios升级标识 1 不需要升级 2 需要升级从appstore中下载 3 进行差量升级", 
  12.         "Android": "android升级标识  1 不需要升级 2 需要升级从服务器下载新的apk 2 进行差量升级" 
  13.     } 
  14.  * 
  15.  */ 
  16. (function(w){ 
  17.   var checkUrl = ""// 检测更新 地址是自己服务器检测的地址根据自己项目填写 
  18.   var downloadWgtUrl = null// 升级包目录 
  19.   var downloadApkUrl = null// 升级包目录 
  20.   var iosURL = null// 苹果地址 
  21.   var oldVer = null// 当前应用版本号 
  22.   var newVer = null// 新版本号 
  23.   var isios = null// ios是否需要升级 1 需要升级从appstore中下载 2 可以使用 
  24.   var isandroid = null// android是否需要升级 1 需要升级从服务器下载新的apk 2 可以使用 
  25.   // plusReady 加载完毕执行 
  26.   function plusReady(){ 
  27.     // 获取本地应用资源版本号 
  28.     plus.runtime.getProperty(plus.runtime.appid,function(inf){ 
  29.       oldVer = inf.version;  
  30.       checkUpdate(); 
  31.     }); 
  32.   } 
  33.   // 检测更新 
  34.   function checkUpdate(){ 
  35.     var xhr = new XMLHttpRequest(); 
  36.     xhr.onreadystatechange=function(){ 
  37.       switch(xhr.readyState){ 
  38.         case 4: 
  39.           if(xhr.status==200){ 
  40.             var res = JSON.parse(xhr.responseText); 
  41.             // 判断是否需要升级 
  42.             newVer = res.version; // 版本号 
  43.             isios = res.ios; // ios是否需要升级 1 不升级 2 appStore升级 3 差量升级 
  44.                         iosURL = res.ipaURL; 
  45.                         downloadWgtUrl = res.wgtURL; 
  46.                         downloadApkUrl = res.apkURL; 
  47.             isandroid = res.android; // android是否需要升级 1 不升级 2 apk升级 3 差量升级 
  48.  
  49.             // 监听应用启动界面关闭事件 
  50.             if(plus.navigator.hasSplashscreen()){ // 启动页未关闭 
  51.               document.addEventListener("splashclosed", checkOs, false);     
  52.             }else//启动界面已关闭 
  53.               checkOs(); 
  54.             } 
  55.           }else
  56.             console.log("检测更新失败!"); 
  57.           } 
  58.           break
  59.         default
  60.           break
  61.       } 
  62.     } 
  63.     xhr.open('GET',checkUrl); 
  64.     xhr.send(); 
  65.   } 
  66.   /** 
  67.   * 判断手机系统检测升级 
  68.   */ 
  69.   function checkOs(){  
  70.     var isupdate = compareVersion(oldVer,newVer); // 是否差量升级 
  71.  
  72.         if(!isupdate){ 
  73.             return false
  74.         }; 
  75.  
  76.     if(plus.os.name == 'Android'){    // Android 用户     
  77.       if(isandroid == 1){ 
  78.                 return false
  79.             }else if(isandroid == 2){ 
  80.                 plus.nativeUI.alert( "Plus is ready!"function(){ 
  81.                     createDownload(); 
  82.                 }, "请升级""确定" ); 
  83.             }else
  84.                 downWgt(); 
  85.             } 
  86.         }else// 苹果用户 
  87.             if(isios == 1){ 
  88.                 return false
  89.             }else if(isios == 2){ 
  90.                 plus.nativeUI.alert( "Plus is ready!"function(){ 
  91.                     plus.runtime.openURL( iosURL ); 
  92.                 }, "请升级""确定" ); 
  93.             }else
  94.                 downWgt(); 
  95.             } 
  96.         } 
  97.     } 
  98.     /** 
  99.     * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false 
  100.     * @param {String} ov 
  101.     * @param {String} nv 
  102.     * @return {Boolean}  
  103.     */ 
  104.     function compareVersion( ov, nv ){ 
  105.         if ( !ov || !nv || ov=="" || nv=="" ){ 
  106.             return false
  107.         } 
  108.         var b=false
  109.         ova = ov.split(".",4), 
  110.         nva = nv.split(".",4); 
  111.         for ( var i=0; i<ova.length&&i<nva.length; i++ ) { 
  112.             var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn); 
  113.             if ( nn>no || sn.length>so.length ) { 
  114.                 return true
  115.             } else if ( nn<no ) { 
  116.                 return false
  117.             } 
  118.         } 
  119.         if ( nva.length>ova.length && 0==nv.indexOf(ov) ) { 
  120.             return true
  121.         } 
  122.     } 
  123.  
  124.     // 下载wgt文件 
  125.     function downWgt(){ 
  126.         plus.nativeUI.showWaiting("更新文件..."); 
  127.         plus.downloader.createDownload( downloadWgtUrl, {filename:"_doc/update/"}, function(d,status){ 
  128.             if ( status == 200 ) {  
  129.                 console.log("下载wgt成功:"+d.filename); 
  130.                 installWgt(d.filename); // 安装wgt包 
  131.             } else { 
  132.                 console.log("下载wgt失败!"); 
  133.             } 
  134.             plus.nativeUI.closeWaiting(); 
  135.         }).start(); 
  136.     } 
  137.     // 更新应用资源升级包 
  138.     function installWgt(path){ 
  139.         plus.nativeUI.showWaiting("安装文件..."); 
  140.         plus.runtime.install(path,{},function(){ 
  141.         plus.nativeUI.closeWaiting(); 
  142.         plus.nativeUI.alert("应用资源更新完成!",function(){ 
  143.             plus.runtime.restart(); 
  144.         }); 
  145.         },function(e){ 
  146.             plus.nativeUI.closeWaiting(); 
  147.             plus.nativeUI.alert(JSON.stringify(e)); 
  148.         }); 
  149.     } 
  150.     /** 
  151.     * 创建下载任务 安卓 
  152.     */ 
  153.     function createDownload() { 
  154.         var dtask = plus.downloader.createDownload( downloadApkUrl, { filename:'_doc/download/'}, function ( d, status ) { 
  155.             // 下载完成 
  156.             if ( status == 200 ) {  
  157.                 plus.runtime.install(d.filename, {}, function(){ 
  158.                 }, function(DOMException ){ 
  159.                     console.log(JSON.stringify(DOMException)); 
  160.                 }); 
  161.             } else { 
  162.                 alert( "Download failed: " + status );  
  163.             }  
  164.         }); 
  165.         dtask.start();  
  166.     } 
  167.     if(window.plus){ 
  168.         plusReady(); 
  169.     }else
  170.         document.addEventListener('plusready',plusReady,false); 
  171.     } 
  172. })(window); 

 

相关热词搜索: