h5+实现APP自动下载更新(hbuilder)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a250758092/article/details/74331330

这里的自动更新并非是热更新,而只是单纯检测服务器上是否有新的版本,如果有则下载安装。

思路:在服务器中配置一个版本文件:xxx.json

{
update:’yes’,//是否自动更新
version:’1.0.8’,//最新的版本号
url:’http://www.xxx.com/xxxxxx.apk‘//最新安装包的URL路径

}

在每次打开H5APP的时候,去请求这个JSON,比对本地的manifest.json中的版本信息是否和服务器上的版本一致,如果有更新的版本,则下载最新的安装包,下载到本地后,安装该软件覆盖原有软件。

代码:

ks.jsonp('http://www.xxxxx.cn/ksd/update_ksd.json','update_ksd');//此为跨域函数,因为APP中的文件都在本地,请求服务器的话需要通过跨域才能拿到数据。

//服务器上的json文件
//因为是跨域的所以返回的是函数而不是JSON数据,参数是JSON格式
update_ksd({
state:'yes',
version:'1.0.8',
url:'http://www.ccccccc.com/xxxx.apk'

})


 function update_ksd(data)//跨域请求后的回调函数
    {

        var new_json=data;
        if(new_json.state=='yes')//如果是自动更新,则判断版本号
        {
        $.ajax({
                type: "get",
                url: "manifest.json",
                async: true,
                success: function(res) {
                    var data = JSON.parse(res);
                    var version=data.version.name;

                    var new_version=new_json.version.replace(/\./g,'');
                    version=version.replace(/\./g,'');
                    if(new_version>version)//比对版本号
                    {
                        //console.log(new_version+'新版本'+version);
                        plus.nativeUI.confirm("应用有新版本,是否立即下载更新?", function(event) {
                        if(event.index == 1) {
                        plus.nativeUI.showWaiting();

                        ks.update_ksd(new_json.url);//更新函数,在下面


                        }
                    }, 'xxx', ['取消', '确认']);
                    }
                }
            });

        }
    }


//ks.update_ksd==========
update_ksd:function(url){
            //console.log(url);
            //创建下载管理对象
            var dtask = plus.downloader.createDownload(url,{}, function ( d, status ) {
        // 下载完成
        if ( status == 200 ) { //下载成功后的回调函数
            plus.nativeUI.toast( "下载成功,准备安装" + d.filename );
            //安装程序,第一个参数是路径,默认的下载路径在_downloads里面
            plus.runtime.install('_downloads/ksd.apk',{},function(){
                plus.nativeUI.toast('安装成功');},function(){plus.nativeUI.toast('安装失败');});
            plus.nativeUI.closeWaiting();
        } else {
             alert( "下载失败 " + status ); 

        }  
    });
    //dtask.addEventListener( "statechanged", onStateChanged, false );
    dtask.start(); //开始下载任务
}

之后每次需要更新版本就不用让用户去扫描二维码之类的,每次登陆进去自动判断是否有新版本,如果确认下载,则下载安装最新版本。

没有更多推荐了,返回首页