uniapp在线下载安装包更新app

首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新

外加网络波动导致失败重新下载更新包

js 复制代码
 uni.getSystemInfo({
      success: function (e) {
        // #ifndef H5
        // 获取手机系统版本
        const system = e.system.toLowerCase();
        const platform = e.platform.toLowerCase();
        // 判断是否为ios设备
        if (
          platform.indexOf("ios") != -1 &&
          (system.indexOf("ios") != -1 || system.indexOf("macos") != -1)
        ) {
          Vue.prototype.SystemPlatform = "apple";
        } else if (platform.indexOf("android") != -1 && system.indexOf("android") != -1) {
          Vue.prototype.SystemPlatform = "android";

          uni.request({
            url: "https://xxxxxxx.love/0.json", // JSON 文件地址
            success: (res) => {
              if (res.statusCode === 200) {
                const version = res.data.version; // 获取 版本字段
                if (version != "1.0.1") {
                  uni.showModal({
                    title: "更新提示",
                    content: "有新的版本可用,是否立即更新?",
                    success: (result) => {
                      if (result.confirm) {
                        const downloadTask = uni.downloadFile({
                          url: "https://xxxxxxx.love/lock.apk", // 更新包地址
                          success: (downloadResult) => {
                            if (downloadResult.statusCode === 200) {
                              const tempFilePath = downloadResult.tempFilePath;
                              // 保存文件到持久目录
                              uni.saveFile({
                                tempFilePath: tempFilePath,
                                success: (saveResult) => {
                                  console.log(
                                    "文件保存成功,路径:",
                                    saveResult.savedFilePath
                                  );
                                  uni.openDocument({
                                    filePath: saveResult.savedFilePath,
                                    success: function (res) {
                                      console.log(res, "打开安装包");
                                    },
                                  });
                                  return;
                                  // 提示用户去文件管理器中安装
                                  uni.showModal({
                                    title: "下载完成",
                                    content:
                                      "更新包下载完成,请在文件管理器中找到并安装更新包。",
                                    showCancel: false,
                                    success: () => {
                                      uni.hideLoading(); // 隐藏进度条
                                    },
                                  });
                                },
                                fail: (err) => {
                                  console.error("保存文件失败", err);
                                  uni.hideLoading(); // 隐藏进度条
                                },
                              });
                            }
                          },
                          fail: (err) => {
                            console.error("下载失败", err);
                            uni.hideLoading(); // 隐藏进度条
                          },
                        });

                        uni.showLoading({
                          title: "正在下载更新包",
                          mask: true,
                        });

                        let lastProgress = 0;
                        let lastUpdateTime = new Date().getTime();
                        const updateInterval = 1500;

                        downloadTask.onProgressUpdate((res) => {
                          const currentTime = new Date().getTime();
                          if (
                            res.progress - lastProgress >= 5 ||
                            currentTime - lastUpdateTime >= updateInterval
                          ) {
                            lastProgress = res.progress;
                            lastUpdateTime = currentTime;
                            uni.showLoading({
                              title: `下载中... ${res.progress}%`,
                              mask: true,
                            });
                          }
                        });
                      }
                    },
                  });
                }
              }
            },
            fail: (err) => {
              console.error("请求失败", err);
            },
          });
        } else {
          Vue.prototype.SystemPlatform = "devtools";
        }
        // #endif
      },
    });
相关推荐
用户904706683578 小时前
uniapp Vue3版本,用pinia存储持久化插件pinia-plugin-persistedstate对微信小程序的配置
前端·uni-app
乔冠宇10 小时前
uniapp创建ts项目tsconfig.json报错的问题
uni-app
细节控菜鸡10 小时前
【2025最新】uniapp 中基于 request 封装实现多文件上传完整指南
uni-app
fakaifa10 小时前
【全开源】企业微信SCRM社群营销高级版系统+uniapp前端
uni-app·开源·企业微信·scrm·源码下载·企业微信scrm
棋子一名13 小时前
跑马灯组件 Vue2/Vue3/uni-app/微信小程序
微信小程序·小程序·uni-app·vue·js
游戏开发爱好者814 小时前
BShare HTTPS 集成与排查实战,从 SDK 接入到 iOS 真机调试(bshare https、签名、回调、抓包)
android·ios·小程序·https·uni-app·iphone·webview
2501_9160088914 小时前
iOS 26 系统流畅度实战指南|流畅体验检测|滑动顺畅对比
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9151063216 小时前
苹果软件加固与 iOS App 混淆完整指南,IPA 文件加密、无源码混淆与代码保护实战
android·ios·小程序·https·uni-app·iphone·webview
2501_9159214317 小时前
iOS 26 崩溃日志解析,新版系统下崩溃获取与诊断策略
android·ios·小程序·uni-app·cocoa·iphone·策略模式
2501_9160137419 小时前
iOS 推送开发完整指南,APNs 配置、证书申请、远程推送实现与上架调试经验分享
android·ios·小程序·https·uni-app·iphone·webview