首先用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
},
});