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

相关推荐
悟空瞎说几秒前
WebSocket 前端丢包处理实战:原理与完整代码实现
前端
秋天的一阵风2 分钟前
✨ 原来文本转换可以这么丝滑!UnifiedJS 实战指南来了
前端·github·markdown
南川琼语13 分钟前
HTTP——AJAX
前端·javascript·ajax
滴滴滴嘟嘟嘟.19 分钟前
强化学习-PPO 奖励塑形实验:Pendulum-v1 中角速度惩罚权重的影响
开发语言·python
灵晔君28 分钟前
【C++】标准模板库STL——set /multiset/map /multimap
开发语言·c++
用户479492835691534 分钟前
专升本前端毕业 1 年,从初创到大厂,我的开源项目上了 github trending,顺便聊聊做开源的收获
前端·后端·github
Ashley的成长之路38 分钟前
前端性能优化实战手册·第1篇:从 Lighthouse 60 到 95 的完整路径
前端·性能优化
从此以后自律43 分钟前
Java 并发编程完整讲解
java·开发语言
思码梁田1 小时前
CSS letter-spacing 属性详解:掌控字符之间的呼吸感
前端·css
Sylvia33.1 小时前
足球数据接口开发实战:如何用火星数据API盘活赛事应用
java·服务器·开发语言·数据库·python