uniapp 下载强制更新版本功能实现

onLoad(() => {
  if (APPCONFIG.force_update) {
    getVersion()
  }
})

/**
 * 初始化页面,默认从本地缓存中获取数据
 * @param {Boolean} force 是否强制从接口获取数据
 * @return undefined
 */
const init = (force = false) => {
  state.successCount = 0
  /* getRulesData(force)
    getMyMsgData()
    uni.stopPullDownRefresh() */
}

const getVersion = () => {
  getOnlineUpdateInfoIF({appFlag:'civicism'}).then((res) => {
    state.apkSize = res.content.apkSize
    console.log(needInstall(state.appDetails.appVersion, res.content.verName))
    if (needInstall(state.appDetails.appVersion, res.content.verName)) {
      // 检测到新版本
      // uni.showToast({
      //   icon: 'none',
      //   duration: 1000,
      //   title: '检测到新版本,下载成功后将安装新版本!'
      // })
      state.hasNewVersion = true
      state.newVersionInfo = res.content
      if(state.apkSize){
         downloadNewApp()
      }
    }
  })
}
const downloadNewApp = () => {
  // #ifdef APP-PLUS
  // 开启下载任务
  // uni.showToast({
  //   icon: 'none',
  //   duration: 2000,
  //   title: '开始下载V' + state.newVersionInfo.verName + '版本'
  // })
  if (state.isLoading) {
    processPopup.value.open()
    return null
  }
  state.isLoading = true
  var dtask = plus.downloader.createDownload(
    state.newVersionInfo.updateurl+'?appFlag=civicism',
    {
      method: 'GET'
    },
    (d, status) => {
      clearInterval(timer)
      hideDialog()
      state.isLoading = false
      if (status === 200) {
        uni.showToast({
          icon: 'none',
          duration: 2000,
          title: '下载成功'
        })
        console.log('下载成功安装: ' + d.filename)
        plus.runtime.install(d.filename)
      } else {
        plus.nativeUI.alert('安装失败,请稍候重试: ' + status)
      }
    }
  )
  dtask.start()
  processPopup.value.open()
  // 关于进度的获取是使用定时器不断获取已经下载的文件的大小,再对比总大小即可
  let timer = setInterval(() => {
     console.log('downloadedSize', dtask.downloadedSize)
    let downPercent = ((dtask.downloadedSize / state.apkSize) * 100).toFixed(2)
    if (downPercent >= 100) {
      downPercent = 100
      clearInterval(timer)
      hideDialog()
    }
    state.downPercent = downPercent
  }, 500)
  // #endif
  // #ifndef APP-PLUS
  // processPopup.value.open()
  // state.downPercent = 40.00
  // #endif
}
const hideDialog = () => {
  processPopup.value.close()
}

 

posted @ 2024-05-11 16:04  春风得意之时  阅读(159)  评论(0)    收藏  举报