uniapp APP端在线升级(简版)

设计思路:

1.版本比较:应用程序检查其当前版本与远程服务器上可用的最新版本

  1. 更新状态指示:如果应用程序是不是最新的版本,则页面提示下载最新版本。

3.下载启动:通过plus.downloader.createDownload()启动新应用版本的下载,监听下载过程。

4.安装:下载成功后,用户可点击更新,应用程序通过plus.runtime.install()触发新应用版本的安装。

5应用重启:最后,应用程序使用plus.runtime.restart()重启以应用。

javascript 复制代码
      let configUrl = config.baseUrl
      let baseUrl = configUrl.toString().split(':')
      let appUrl = baseUrl[0] + ':' + baseUrl[1] + ":8888/statics/his-app.apk"
      let downloadTask = plus.downloader.createDownload(
        appUrl,

        {
          method: "GET",
        },
        (task, status) => {
          console.log(status, "status")
          if (status == 200) {
            //下载成功
            uni.showModal({
              title: '',
              content: '下载成功,确定现在更新吗?',
              confirmText: '更新',
              confirmColor: '#EE8F57',
              success: function (res) {
                if (res.confirm) {
                  console.log("更新")
                  plus.runtime.install(
                    task.tempFilePath,
                    {
                      force: true,
                    },
                    function () {
                      // 安装成功,可以重启应用
                      plus.runtime.restart()
                    },
                    function (e) {
                      uni.showModal({
                        title: '更新失败',
                        content: '更新失败',
                        showCancel: false
                      })
                      plus.nativeUI.closeWaiting()
                      // 安装失败,处理错误
                    }
                  )
                }
              },
              complete: () => {
                // uni.hideLoading();
              }
            })
          } else {
            uni.showToast({
              title: "下载失败",
              icon: "error",
            })
          }
        }
 ).start();

     
javascript 复制代码
 //监听下载过程
      downloadTask.addEventListener("statechanged", (task, status) => {
        switch (task.state) {
          case 1: // 开始
            console.log("开始")
            break
          case 2: //已连接到服务器
            console.log("已连接到服务器")
            break
          case 3: // 已接收到数据
            console.log("已接收到数据 ")
            let hasProgress = task.totalSize && task.totalSize > 0 //是否能获取到App大小
            if (hasProgress) {
              let current = parseInt(
                (100 * task.downloadedSize) / task.totalSize
              ) //获取下载进度百分比
              console.log(current)
            }
            break
          case 4: // 下载完成
            console.log("下载完成")
            break
        }
      })
      

相关推荐
前端老宋Running4 小时前
一次从“卡顿地狱”到“丝般顺滑”的 React 搜索优化实战
前端·react.js·掘金日报
隔壁的大叔4 小时前
如何自己构建一个Markdown增量渲染器
前端·javascript
用户4445543654264 小时前
Android的自定义View
前端
学习路上_write4 小时前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
一起养小猫4 小时前
《Java数据结构与算法》第三篇(下)队列全解析:从基础概念到高级应用
java·开发语言·数据结构
WILLF4 小时前
HTML iframe 标签
前端·javascript
枫,为落叶5 小时前
Axios使用教程(一)
前端
pale_moonlight5 小时前
十、 Scala 应用实践 (上)
大数据·开发语言·scala
小章鱼学前端5 小时前
2025 年最新 Fabric.js 实战:一个完整可上线的图片选区标注组件(含全部源码).
前端·vue.js
ohyeah5 小时前
JavaScript 词法作用域、作用域链与闭包:从代码看机制
前端·javascript