PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > HBuilder教程 > 正文

    MUI热更新代码分享

    作者:admin来源:网络浏览:时间:2018-01-27 22:22:10我要评论
    分享到
    导读:MUI热更新代码分享
    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); 

     

    转载请注明(B5教程网)原文链接:http://www.bcty365.com/content-146-6171-1.html
    相关热词搜索:
    网友评论: