//APP更新
export default function appUpdate() {
console.log('plus.runtime.appid', plus.runtime.appid)
console.log('plus.runtime.version', plus.runtime.version)
console.log('uni.getSystemInfoSync().appVersion:', uni.getSystemInfoSync().appVersion)
console.log('plus.device.imei', plus.device.imei)
const apiUrl = 'https://dev3.liwentech.com/jeecg-boot/appVersionUpdate/lwAppVersionUpdate/selectNewAppVersion'
const fuqUrl = 'https://dev3.liwentech.com/jeecg-boot/sys/common/static/'
// 工具函数:将对象转为 URL 查询字符串
function objToQuery(obj) {
const parts = [];
for (const key in obj) {
if (obj.hasOwnProperty(key) && obj[key] != null && obj[key] !== '') {
parts.push(${encodeURIComponent(key)}=${encodeURIComponent(obj[key])});
}
}
return parts.join('&');
}
const params = {
appid: plus.runtime.appid,
version: plus.runtime.version,
imei: plus.device.imei // 如果为空,后面会被过滤掉
};
// 转为查询字符串
const queryString = objToQuery(params);
const url = ${apiUrl}?${queryString};
uni.request({
url: url, //检查更新的服务器地址
method: 'GET',
success: (res: any) => {
plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {
console.log('客户端版本信息 wgtinfo', wgtinfo)
console.log('服务端版本信息 res', res)
// 客户端版本
let client_version = wgtinfo.version
//------------------------前两位大版本有改动-----------------------------------------------
// 大版本是否一致 版本号1.1.0,前两位如果有改动,就是大版本更新;否则就是小版本热更新
const flag_update =
client_version.split('.').splice(0, 2).join('.') !=
res.data.result.version.split('.').splice(0, 2).join('.')
//------------------------前两位大版本有改动-----------------------------------------------
//------------------------第三位小版本有改动-热更新-----------------------------------------------
// 客户端版本号
let client_version_number = Number(client_version.split('.')[2])
// 服务器版本号
let current_version_number = Number(res.data.result.version.split('.')[2])
// 如果客户端版本号小于服务器版本号,则提醒用户更新
const flag_hot = !flag_update && client_version_number < current_version_number
//------------------------第三位小版本有改动-热更新-----------------------------------------------
console.log('客户端版本 client_version', client_version)
console.log('客户端版本号 client_version_number', client_version_number)
console.log('服务器版本号 current_version_number', current_version_number)
console.log('升级更新 flag_update', flag_update)
console.log('热更新 flag_hot', flag_hot)
if (flag_update) {
console.log('*****开始大版本更新*****')
// 提醒用户更新
uni.showModal({
title: '更新提示',
content: res.data.result.note,
success: (showResult) => {
if (showResult.confirm) {
plus.nativeUI.toast('正在准备环境,请稍后!')
console.log(res.data.result.url)
const url = fuqUrl+res.data.result.url
console.log(url)
const downloadTask = plus.downloader.createDownload(
url,
{
method: 'GET',
filename: '_doc/update.apk',
},
function (d, status) {
if (status == 200) {
const path = d.filename; //下载apk
// plus.runtime.install(path) // 自动安装apk文件
plus.runtime.install(
path,
{ force : true },
()=>{
const currentWebview = plus.webview.currentWebview();
if (currentWebview) {
currentWebview.clearCache(); // 清除页面缓存
currentWebview.clearHistory(); // 清除历史记录
currentWebview.reload(true); // 强制重载
}
uni.clearStorageSync()
plus.nativeUI.toast('安装成功,即将重启');
// 清除缓存文件
plus.cache.clear(() => {
plus.runtime.restart()// 重启应用
})
},
(e) => {
console.error('安装失败:', e);
plus.nativeUI.alert(`安装失败: ${e.message}`);
}
)
} else {
plus.nativeUI.alert('版本更新失败:' + status)
}
},
)
downloadTask.start()
}
},
})
}
// else if (flag_hot) {
// console.log('*****开始小版本热更新*****')
// const wgtUrl = fuqUrl+res.data.result.url
// uni.downloadFile({
// url: wgtUrl,
// success: (downloadResult) => {
// console.log("热更新downloadResult",downloadResult.tempFilePath)
// if (downloadResult.statusCode === 200) {
// plus.nativeUI.toast(正在热更新!${res.data.result.versionCode})
// plus.runtime.install(
// downloadResult.tempFilePath,
// {
// force: false,
// },
// function () {
// plus.nativeUI.toast('热更新成功')
// plus.runtime.restart()
// },
// function (e) {
// console.log(e)
// plus.nativeUI.toast(热更新失败:${e.message})
// },
// )
// }
// },
// })
// }
})
},
})
}
1 个回复
Ask小助手 - Ask社区AI助手
您的问题很可能是由于热更新逻辑被注释导致的。在您的代码中,
// else if (flag_hot)部分被注释了,这意味着当检测到小版本更新时(仅第三位数字变化),系统不会执行热更新操作,而是直接跳过。关键点分析:
解决方案:
// else if (flag_hot)的注释plus.cache.clear()和uni.clearStorageSync()调试建议:
注意:整包更新(APK)和热更新(wgt)是两种不同机制,小版本更新应优先使用热更新。
要回复问题请先登录或注册
公告
更多>相关问题