小云菜
小云菜
  • 发布:2015-04-30 18:21
  • 更新:2016-12-23 12:00
  • 阅读:13566

自动+手动在线升级

分类:HTML5+

代码参考App资源在线升级
在原自动在线升级的基础上新增了手动在线更新

<!DOCTYPE html>  
<html>  

    <head>  
        <meta charset="utf-8">  
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />  
        <title>hello world</title>  
        <script src="js/update3.js" type="text/javascript" charset="utf-8"></script>  
        <script type="text/javascript">  
            function plusReady() {  
                // Android处理返回键  
                plus.key.addEventListener('backbutton', function() {  
                    if (confirm('确认退出?')) {  
                        plus.runtime.quit();  
                    }  
                }, false);  
                                //自动在线更新  
                //mui.checkUpdate();  
                mui.checkUpdate(function(key) {  
                    if (key)  
                        console.log("有新版本更新");  
                        else console.log("无新版本可更新")  
                });  
            }  
            if (window.plus) {  
                plusReady();  
            } else {  
                document.addEventListener('plusready', plusReady, false);  
            }  

            function checkUpdate() {  
                mui.downWgt(true);  
            }  
        </script>  
    </head>  

    <body>  
        Hello HBuilder for test update.  
        <br/>  
        <br/> version 1.0  
        <br/>  
        <br/>  
        <br/>  
        <button onclick="checkUpdate()">Check Update</button>  
    </body>  

</html>
(function($) {  
    var wgtVer = null;  
    // 检测更新,返回最新版本号  
    //正式上线时请更改当前版本  
    var checkUrl = "http://demo.dcloud.net.cn/test/update/check.php";  
    // 下载wgt文件  
    var wgtUrl = "http://demo.dcloud.net.cn/test/update/H5EF3C469.wgt";  

    function checkUpdate(callback) {  
        // 获取本地应用资源版本号  
        plus.runtime.getProperty(plus.runtime.appid, function(inf) {  
            wgtVer = inf.version;  
            console.log("当前应用版本:" + wgtVer);  
        });  
        //      plus.nativeUI.showWaiting("检测更新...");  
        var xhr = new XMLHttpRequest();  
        xhr.onreadystatechange = function() {  
            switch (xhr.readyState) {  
                case 4:  
                    //                  plus.nativeUI.closeWaiting();  
                    if (xhr.status == 200) {  
                        console.log("检测更新成功:" + xhr.responseText);  
                        var newVer = xhr.responseText;  
                        if (compareVersion(wgtVer, newVer)) {  
                            if (!callback)  
                                downWgt(false); // 下载升级包  
                                else callback(true);  
                        } else {  
                            //                          plus.nativeUI.alert("无新版本可更新!");  
                            if (callback) callback(false);  
                        }  
                    } else {  
                        console.log("检测更新失败!");  
                        //                      plus.nativeUI.alert("检测更新失败!");  
                    }  
                    break;  
                default:  
                    break;  
            }  
        }  
        xhr.open('GET', checkUrl);  
        xhr.send();  
    }  

    function downWgt(key) {  
            var w;  
            if (key) {  
                w = plus.nativeUI.showWaiting("   开始下载...  ");  
            }  
            var options = {  
                filename: "_doc/update/"  
            };  
            var dtask = plus.downloader.createDownload(wgtUrl, options, function(d, status) {  
                if (status == 200) {  
                    console.log("下载wgt成功:" + d.filename);  
                    setTimeout(installWgt(d.filename, key), 2000); // 安装wgt包  
                } else {  
                    console.log("下载wgt失败!");  
                    if (key) {  
                        plus.nativeUI.alert("下载更新资源失败!");  
                    }  
                }  
            });  
            if (key) {  
                dtask.addEventListener("statechanged", function(task, status) {  
                    switch (task.state) {  
                        case 1: // 开始  
                            w.setTitle("   开始下载...   ");  
                            break;  
                        case 2: // 已连接到服务器  
                            w.setTitle("   开始下载...   ");  
                            break;  
                        case 3:  
                            var a = task.downloadedSize / task.totalSize * 100;  
                            console.log(a)  
                            w.setTitle("   已下载" + parseInt(a) + "%   ");  
                            break;  
                        case 4: // 下载完成  
                            w.close();  
                            break;  
                    }  
                });  
            }  
            dtask.start();  

        }  

        // 更新应用资源  

    function installWgt(path, key) {  
            if (key) {  
                plus.nativeUI.showWaiting("在线升级,安装资源文件...");  
            }  
            plus.runtime.install(path, {}, function() {  
                if (key) {  
                    plus.nativeUI.closeWaiting();  
                    //自动在线升级不重启  
                    plus.nativeUI.alert("应用资源更新完成!", function() {  
                    plus.runtime.restart();  
                });  
                }  
                console.log("安装wgt文件成功!");  

            }, function(e) {  

                console.log("安装wgt文件失败[" + e.code + "]:" + e.message);  
                if (key) {  
                    plus.nativeUI.closeWaiting();  
                    plus.nativeUI.alert("在线升级,安装资源文件失败");  
                }  
            });  
        }  
        /**  
         * 比较版本大小,如果新版本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;  
        }  
    }  

    $.checkUpdate = checkUpdate;  
    $.downWgt = downWgt;  
    return $;  
}(mui={}));
2015-04-30 18:21 负责人:无 分享
已邀请:
wind

wind

update3.js的代码是第二个代码页面吧?
同时是我想问问:
chekurl这个必须要写的么?因为我不确定后台用什么语言的啊?
另外就是这个方法是建立引导页面,吸引用户更新,是吧!!(我现在电脑用不了模拟器)

  • 小云菜 (作者)

    是第二个页面

    checkurl默认返回的是最新版本号,语言无关

    关于更新 可以在首页默认自动更新,也可以在设置页面检查更新,手动选择是否要更新

    建议使用andorid4.4以上测试,chrome 能调试。帮助链接在这http://ask.dcloud.net.cn/docs#http://ask.dcloud.net.cn/article/69

    2015-05-25 09:25

木乃森

木乃森

报错,“WGT安装包中manifest.json文件的version版本不匹配”

这个问题的原因是什么,怎么解决呢?

  • 小云菜 (作者)

    可能是你打包的版本号和放出来和旧版本比较的版本号不一致

    2015-09-10 11:44

  • 木乃森

    嗯嗯,确实是这个原因,在安装升级的时候,设置不进行版本对比就好了。

    2015-09-10 12:25

  • 1***@qq.com

    回复 木乃森:这个问题我也遇到了,能说说具体是怎么回事吗?如果不进行版本对比,那如何下载

    2016-04-26 17:46

  • 1***@qq.com

    @APICloud产品与DCloud深度对比分析

    2016-08-24 16:04

  • 1***@qq.com

    回复 1***@qq.com:你解决了吗

    2016-08-24 16:05

3***@qq.com

3***@qq.com

http://demo.dcloud.net.cn/test/update/check.php
这个文件里面只需要填一组最新的版本号就OK了?
如1.0

葛亮

葛亮

src="js/update3.js"这个文件在哪里?

葛亮

葛亮

找到了 感谢分享

xutao

xutao

请问如果要在升级成功后做回调处理,应该在哪里插入回调处理?

该问题目前已经被锁定, 无法添加新回复