import request from "./request"; let version_number; function getVersionNum() { // 获取当前app的版本 const systemInfo = uni.getSystemInfoSync(); // 应用程序版本号 // 条件编译,只在APP渲染 // #ifdef APP version_number = systemInfo.appWgtVersion; // #endif // #ifdef H5 version_number = systemInfo.appVersion; console.log(systemInfo.appVersion, '版本号'); // #endif // #ifdef MP-WEIXIN const accountInfo = uni.getAccountInfoSync(); version_number = accountInfo.miniProgram.version // 小程序 版本号 console.log(accountInfo.miniProgram.version, '小程序版本号') // #endif return version_number; } // 检查版本自动更新 function getUpdateInfo() { return new Promise(async (resolve, reject) => { const systemInfo = await uni.getSystemInfoSync(); // 获取手机型号 const deviceBrand = systemInfo.deviceBrand; console.log('deviceBrand', deviceBrand) let type = deviceBrand == 'apple' ? '1' : deviceBrand == 'huawei' ? '2' : deviceBrand == 'honor' ? '3' : deviceBrand == 'xiaomi' ? '4' : deviceBrand == 'oppo' ? '5' : deviceBrand == 'vivo' ? '6' : ''; if (!type) return; const response = await request.post('/sj/getAppVersion', { type }); console.log('response', response) resolve({ version: response.data.version, downloadUrl: response.data.url // APK下载地址 }) }) } function installApp(downloadUrl) { // 下载APK const downloadTask = uni.downloadFile({ url: 'https://app.mrrweb.com.cn/mrrapp.com.1.1.4.apk', success: (downloadResult) => { console.log('downloadResult', downloadResult) if (downloadResult.statusCode === 200) { // 安装APK plus.runtime.install(downloadResult.tempFilePath, { force: false }, () => { console.log('安装成功') // plus.runtime.restart(); }, (err) => { console.log('err', err) uni.showToast({ title: '安装失败', icon: 'none' }) }) } }, fail(err) { console.log('err', err) } }) // 监听下载进度 downloadTask.onProgressUpdate((res) => { console.log('下载进度:', res.progress) }) } // 建议的版本比较函数 function compareVersion(current, latest) { const curParts = current.split('.').map(Number); const latParts = latest.split('.').map(Number); for (let i = 0; i < Math.max(curParts.length, latParts.length); i++) { const cur = curParts[i] || 0; const lat = latParts[i] || 0; if (cur < lat) return true; if (cur > lat) return false; } return false; } // app内跟新下载 function uploadAppDowlond(url) { const downloadTask = uni.downloadFile({ url: 'http://app.mrrweb.com.cn/mrrapp.com.1.1.4.apk', success: downloadResult => { if (downloadResult.statusCode === 200) { plus.runtime.install( downloadResult.tempFilePath, { force: false }, function() { // 下载资源成功,重启应用 plus.runtime.restart() }, function(e) { // 下载资源失败 } ) } } }) downloadTask.onProgressUpdate((res) => { console.log('下载进度' + res.progress); console.log('已经下载的数据长度' + res.totalBytesWritten); console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite); // 满足测试条件,取消下载任务。 // if (res.progress > 50) { // downloadTask.abort(); // } }); } function showUpdateDialog(updateInfo) { uni.showModal({ title: `发现新版本`, content: '是否更新最新版本?', confirmText: '立即更新', cancelText: '稍后再说', success: (res) => { if (res.confirm) { // #ifdef APP-PLUS // if (plus.os.name === 'iOS') { // plus.runtime.openURL(updateInfo.downloadUrl) // } else { // installApp(updateInfo.downloadUrl) // } plus.runtime.openURL(updateInfo.downloadUrl) // #endif } } }) } export default { async uploadApp(type) { // uploadAppDowlond() try { const currentVersion = getVersionNum(); if (!currentVersion) return let updateInfo // #ifdef APP-PLUS updateInfo = await getUpdateInfo() // #endif console.log('updateInfo', updateInfo) if (compareVersion(currentVersion, updateInfo.version)) { showUpdateDialog(updateInfo) } else { if (type == 'onLaunch') return; uni.showToast({ title: '当前已是最新版本', icon: 'none' }) } } catch (error) { console.error('检查更新失败:', error) uni.showToast({ title: '检查更新失败', icon: 'none' }) } } }