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

相关推荐
灵感__idea2 小时前
Hello 算法:贪心的世界
前端·javascript·算法
小成202303202653 小时前
Linux高级02
linux·开发语言
知行合一。。。3 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.03 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H3 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
A.A呐3 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子3 小时前
Java:异常(exception)
java·开发语言
lifewange4 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
GreenTea4 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
cmpxr_4 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法