emis-app/common/appUpdate/index.js
2024-09-02 15:55:35 +08:00

176 lines
4.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
// #ifndef APP-PLUS
// TODO MOCK数据
resolve({})
// #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('正在安装...')
// #ifdef APP-PLUS
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()
});
// #endif
} 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 getCompareVersion = async () => {
let curAppInfo = await getCurrentAppInfo()
let lastAppInfo = await getLastAppInfo(curAppInfo)
let cmpRes = await compareInfo(curAppInfo, lastAppInfo)
console.log("checkUpdate cmpRes ====", cmpRes)
return cmpRes
}
export const checkUpdate = async () => {
// app升级检测
// #ifdef APP-PLUS
let cmpRes = await getCompareVersion()
if (cmpRes.hasNewVersion) {
let fmBl = await confirmModal(
`app最新版本:${cmpRes.lastAppInfo.version}.${cmpRes.lastAppInfo.versionCode}, 是否更新?`)
if (fmBl) {
await installNewApk(cmpRes.url)
}
}
return cmpRes
// #endif
//微信小程序检测
// #ifdef MP-WEIXIN
if (wx.canIUse('getUpdateManager')) { //判断当前微信版本是否支持版本更新
const updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(async function(res) {
if (res.hasUpdate) { // 请求完新版本信息的回调
updateManager.onUpdateReady(async function() {
let cbl = await confirmModal('新版本已经准备好,是否重启应用?')
if (cbl) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
});
updateManager.onUpdateFailed(function() {
showToast('新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~')
})
}
})
} else {
showToast('当前微信版本过低,无法使用新功能,请升级到最新微信版本后重试。')
}
// #endif
}