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
        }
      })
      

相关推荐
工呈士3 分钟前
HTML 模板技术与服务端渲染
前端·html
皮实的芒果5 分钟前
前端实时通信方案对比:WebSocket vs SSE vs setInterval 轮询
前端·javascript·性能优化
鹿九巫5 分钟前
【CSS】层叠,优先级与继承(三):超详细继承知识点
前端·css
爱编程的鱼5 分钟前
C# 结构(Struct)
开发语言·人工智能·算法·c#
奕云6 分钟前
react-redux源码分析
前端
咸鱼一号机7 分钟前
:global 是什么
前端
专业掘金7 分钟前
0425 手打基础丸
前端
五号厂房8 分钟前
Umi Max 如何灵活 配置多环境变量
前端
红尘散仙10 分钟前
六、WebGPU 基础入门——Vertex 缓冲区和 Index 缓冲区
前端·rust·gpu
南望无一10 分钟前
webpack性能优化和构建优化
前端·webpack