uniapp 更新APP

/** App更新调用,在App.vue中调用
 * 最少字段 {"version":1.0.0,"file":"appUrl"}
 * 返回:{"update":true,"file":"appUrl"}
 * */

let $updateApp = (CloudAppUrl)=>{
    return new Promise((resolve,reject)=>{
        //获取本地版本信息
        let App = plus.runtime.getProperty(plus.runtime.appid,(info) => {
            if(CloudAppUrl.version !== undefined && CloudAppUrl.version !== null){
                if(CloudAppUrl.file !== undefined && CloudAppUrl.file !== null){
                    if(CloudAppUrl.version > info.version){
                        resolve({"update":true,"file":CloudAppUrl.file})
                    }
                }
            }
            reject({"update":false})
        })        
    })
}


/** 开始下载更新
 * 参数:url地址
 * 无返回:直接执行
 */

let $download = (fileUrl)=>{
    let options = {
        method:'GET',
        timeout:10,
        retry:1
    }
    // 创建开始下载
    let down = plus.downloader.createDownload(fileUrl,options,function(d,status){
        
        if(status === 200){
            // 下载成功以后调用APP安装
            plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename,{},{},function(err){
                plus.nativeUI.toast("更新程序安装失败")
            }))
        }else{
            plus.downloader.clear()
            down.abort()
            // 请求失败
            plus.nativeUI.toast('更新程序下载失败:'+status)
        }
    })
    try{
        // 开始下载
        down.start()
        // 获取当前下载进度
        let showLoadin = plus.nativeUI.showWaiting("开始下载....")
        down.addEventListener('statechanged',function(task,status){
            // 给下载人物设置一个监听
            switch(task.state){
                case 1:
                    showLoadin.setTitle("开始下载.....")
                    break;
                case 2:
                    showLoadin.setTitle("已连接到服务器")
                    break;
                case 3:
                    // console.log("当前",task.downloadedSize / task.totalSize * 100)
                    
                    let pr = parseInt((parseFloat(task.downloadedSize)/parseFloat(task.totalSize)*100))
                    showLoadin.setTitle('已下载:' +pr+ '%' )
                    break;
                case 4:
                    plus.nativeUI.closeWaiting()
                    // 下载完成
                    break;
            }
        })
    }catch(err){
        down.abort()
        plus.nativeUI.closeWaiting();
        throw new Error("更新程序出现错误")
    }
} 


// app更新
// 参数为对象:{"version":1.0.0,"file":"appUrl"}
 

let $updateAppRequest = (updateUrl)=>{
    uni.getNetworkType({
        success:res=>{
            // 当前是否有网络连接
            if(res.networkType === 'none'){
                console.log('当前无网络连接');
                uni.showToast({
                    icon:'none',
                    title:'当前无网络连接',
                    duration:3000
                })
            }else{
                // 判断版本是否需要更新
                $updateApp(updateUrl).then((res)=>{
                    if(res.update){
                        uni.showModal({
                            title:'有新版本更新!',
                            content:'立即更新后才能使用!',
                            showCancel:false,//隐藏取消按钮
                            confirmText:'立即更新',
                            confirmColor:'#576b95',
                            success:function(){
                                // 调用下载
                                $download(res.file)
                            }
                        })
                    }
                })
                
            }
        }
    })
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyz141001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值