H5+App 检查更新

1.设置一个检查更新的函数

const checkUpdate = async() => {
    try{
        // 通过接口获取到最新的版本信息(版本号/版本更新的内容)
        const newVersion = await getNewVersion({……})
        // 获取当前APP的版本(用Hbuilder打包的时候填写的版本号)
        let version = plus.runtime.version
        //一般会有版本忽略,我这边暂时存在前端的缓存里
        if(userInfo.ignoreVersion.includes(version.value.new)){
            console.log('这个版本忽略,不更新')
        }else{
            // 用【semver.js】进行版本的比较
            const result = semver.compare(newVersion, version)
            if(result > 0){
             console.log('需要更新版本')
             //打开版本更新的弹窗
             updateShow.value = true
            }
        }
    }catch(err:any){
        console.log('checkUpdate',err)
    }
}

这边就会有一个弹窗来给用户进行选择更新

如果用户选择了确定更新,就调用更新的函数

const comfirmUpdate = () => {
  try {
    console.log('更新')
    // 在线包的地址
    let url = '…………'
    let options = {
      method: 'stream',
      timeout: 120000,
      retry: true,
      installSuccess: function (e: any) {
        console.log('安装成功:' + e.filename)
      },
      installError: function (e: any) {
        console.log('安装失败:' + e.message)
      },
    }
    // @ts-ignore
    let task = plus.downloader.createDownload(url, { filename: '_downloads/' }, function (download, status) {
      if (status === 200) {
        let localPath = download.filename
        // @ts-ignore
        plus.runtime.install(
          localPath,
          options,
          function (localPath: any) {
            console.log('应用已下载至本地路径:' + localPath)
          },
          function (err: any) {
            console.log('错误信息:', err)
          }
        )
        console.log('执行完成maybe')
      } else {
        console.log('下载失败')
      }
    })
    task.addEventListener('statechanged', function (download: any, status: any) {
      // 获取当前下载状态和进度信息
      // let state = download.state
      // let progress = (download.downloadedSize / download.totalSize) * 100
      // console.log('下载状态:' + state + ',下载进度:' + progress + '%')
      //进度条展示
      progress.value = (Number(download.downloadedSize / download.totalSize).toFixed(2) as unknown as number) * 100
    })
    task.start()
  } catch (err) {
    console.log('comfirmUpdate', err)
  }
}

这样子操作下来就没有问题啦~

备注:一般url会是直接的在线下载地址,例如http://……aa.doc或者.pdf,但是如果不是下载地址而是返回数据流的话,就需要配置请求头

//根据返回的数据流的文件格式设置
// 例如:apk:application/vnd.android.package-archive;xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
 task.setRequestHeader('Content-Type', '……')
// 如果需要token,也要配置Authorization
 task.setRequestHeader('Authorization', 'Bearer ' + userInfo.TOKEN)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值