emis-app/common/appUpdate/index.js
2024-06-16 12:50:00 +08:00

120 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { confirmModal, showLoading, hideLoading, showToast } from "@/common/untool"
import * as apiService from "@/common/api"
export const getSystemInfo = ()=> {
let info = uni.getSystemInfoSync()
console.log('getSystemInfo=====', info)
return info
}
export const getCurrentAppInfo = ()=> {
return new Promise((resolve, reject)=> {
// 保存 app 版本信息
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo)=> {
console.log('plus.runtime.appid=========', plus.runtime.appid);
console.log('widgetInfo=========', widgetInfo);
widgetInfo._appVersion = `${widgetInfo.version}.${widgetInfo.versionCode}`
resolve(widgetInfo)
});
// #endif
})
}
const installNewApk = (url)=> {
console.log("installNewApk url===", url)
return new Promise((resolve, reject)=> {
showLoading('正在下载资源文件,请稍等...')
let downInstance = uni.downloadFile({
url: url,
success: (downloadResult) => {
console.log("===downloadResult===", downloadResult)
hideLoading()
if (downloadResult.statusCode === 200) {
showLoading('正在安装...')
plus.runtime.install(downloadResult.tempFilePath, {
force: true
}, function() {
hideLoading()
console.log('install success...');
plus.runtime.restart();
resolve()
}, function(e) {
hideLoading()
console.error('install fail...');
reject()
});
} else {
showToast(`文件下载失败, 错误码:${downloadResult.statusCode}`)
reject()
}
},
fail: (err)=> {
console.log('download file err...', err);
showToast("文件下载失败")
hideLoading()
}
});
downInstance.onProgressUpdate((res)=> {
let { totalBytesExpectedToWrite, totalBytesWritten } = res
let percent = (totalBytesWritten / totalBytesExpectedToWrite) * 100
// showLoading(`下载进度:${parseInt(percent)}%`)
})
})
}
const getLastAppInfo = async (curAppInfo)=> {
let { version, versionCode } = curAppInfo
let { deviceId } = getSystemInfo()
let res = await apiService.getLastAppVersion({ version, versionCode, deviceId })
console.log("getLastAppInfo res====", res)
// res.data = {
// version: '1.0.0',
// versionCode: 100,
// apkUrl: 'http://192.168.1.7:5173/static/t.apk',
// wgtUrl: 'http://192.168.1.7:5173/static/t.wgt',
// whiteDeviceIds: ['F9E778C90D0E9A8DA9D95AA97B00A3FB'],
// remark: '',
// }
return res.data
}
const compareInfo = (curAppInfo, lastAppInfo)=> {
let hasNewVersion = false
let url = ''
// 强制更新app
if(lastAppInfo.version && curAppInfo.version != lastAppInfo.version) {
hasNewVersion = true
url = lastAppInfo.apkUrl
}
// 热更新
if(!url && lastAppInfo.versionCode && curAppInfo.versionCode != lastAppInfo.versionCode) {
hasNewVersion = true
url = lastAppInfo.wgtUrl
}
// 判断是否走白名单更新
if(url && lastAppInfo.whiteDeviceIds?.length > 0) {
let sysInfo = getSystemInfo()
hasNewVersion = lastAppInfo.whiteDeviceIds.indexOf(sysInfo?.deviceId) > -1
}
return {
hasNewVersion,
url,
lastAppInfo
}
}
export const checkUpdate = async ()=> {
let curAppInfo = await getCurrentAppInfo()
let lastAppInfo = await getLastAppInfo(curAppInfo)
let cmpRes = await compareInfo(curAppInfo, lastAppInfo)
console.log("checkUpdate cmpRes ====", cmpRes)
if(cmpRes.hasNewVersion && cmpRes.url) {
let fmBl = await confirmModal(`app最新版本:${cmpRes.lastAppInfo.version}.${cmpRes.lastAppInfo.versionCode}, 是否更新?`)
if(fmBl) {
await installNewApk(cmpRes.url)
}
}
return cmpRes
}