uu
This commit is contained in:
parent
bb08b466b3
commit
a89869175a
14
App.vue
14
App.vue
@ -5,8 +5,9 @@
|
|||||||
import {
|
import {
|
||||||
version
|
version
|
||||||
} from './package.json'
|
} from './package.json'
|
||||||
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
|
|
||||||
import { USERKEY, COMMONKEY } from "@/store/actionKey"
|
import { USERKEY, COMMONKEY } from "@/store/actionKey"
|
||||||
|
import { checkUpdate } from "@/common/appUpdate"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
globalData: {
|
globalData: {
|
||||||
@ -26,10 +27,6 @@
|
|||||||
// 线上示例使用
|
// 线上示例使用
|
||||||
console.log('App Launch');
|
console.log('App Launch');
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
// App平台检测升级,服务端代码是通过uniCloud的云函数实现的,详情可参考:https://ext.dcloud.net.cn/plugin?id=4542
|
|
||||||
if (plus.runtime.appid !== 'HBuilder') { // 真机运行不需要检查更新,真机运行时appid固定为'HBuilder',这是调试基座的appid
|
|
||||||
checkUpdate()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 一键登录预登陆,可以显著提高登录速度
|
// 一键登录预登陆,可以显著提高登录速度
|
||||||
uni.preLogin({
|
uni.preLogin({
|
||||||
@ -50,6 +47,7 @@
|
|||||||
},
|
},
|
||||||
onShow: function() {
|
onShow: function() {
|
||||||
console.log('HHH Show')
|
console.log('HHH Show')
|
||||||
|
this.appCheckUpdate()
|
||||||
},
|
},
|
||||||
onHide: function() {
|
onHide: function() {
|
||||||
console.log('HHH Hide')
|
console.log('HHH Hide')
|
||||||
@ -58,7 +56,11 @@
|
|||||||
test: ''
|
test: ''
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations(['setUniverifyErrorMsg', 'setUniverifyLogin'])
|
...mapMutations(['setUniverifyErrorMsg', 'setUniverifyLogin']),
|
||||||
|
appCheckUpdate(){
|
||||||
|
console.log("appCheckUpdate=============")
|
||||||
|
checkUpdate()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
176
common/appUpdate/index.js
Normal file
176
common/appUpdate/index.js
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user