需要使用DClound插件市场的一个插件挺好用的!
app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场,wgt静默更新https://ext.dcloud.net.cn/plugin?id=7286
开始贴代码
// @/utils/method.js
/**
* 获取当前app最新版本
* @param number versionCode 当前app的版本号
*/
export function getAppCurrentVersion(versionCode) {
return new Promise(async (resolve, reject) => {
const params = {
// android或者ios
system: uni.$u.os() == 'ios' ? 1 : 0,
// 版本号 如:100
editionNumber: versionCode || ''
}
// 需要改成自己的服务端的获取app最新版本的接口...
// 接口返回值要跟要求的字段一样
const res = await getAppVersion(params)
resolve(res.data)
})
}
// #ifdef APP-PLUS
// app端强制更新
export function checkAppUpdate() {
getAppCurrentVersion().then(data => {
const obj = {
system: data.system,
describe: data.describe, // 版本更新内容
edition_url: data.editionUrl, // apk、wgt包下载地址或者应用市场地址
edition_force: data.editionForce, // 是否强制更新 0代表否 1代表是
package_type: data.packageType, // 0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
edition_issue: data.editionIssue, // 是否发行 0否 1是 为了控制上架应用市场审核时不能弹出热更新框
// 版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
edition_number: data.editionNumber,
edition_name: data.editionName, // 版本名称 manifest里的版本名称
edition_silence: data.editionSilence // 是否静默更新 0代表否 1代表是
}
plus.runtime.getProperty(plus.runtime.appid, (inf) => {
// 判断后台返回版本号是否大于当前应用版本号 && 是否发行(上架应用市场时一定不能弹出更新提示)
if (Number(obj.edition_number) > Number(inf.versionCode) && obj.edition_issue == 1) {
/**
* 如果是wgt升级,并且是静默更新
* 注意!如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应
*/
if (obj.package_type == 1 && obj.edition_silence == 1) {
// 调用静默更新方法 传入下载地址
silenceUpdate(obj.edition_url)
} else {
/**
* 跳转更新页面
* 注意!如果pages.json第一页的代码里有一打开就跳转其他页面的操作,下面这行代码最好写在setTimeout里面设置延时3到5秒再执行
*/
uni.navigateTo({
url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' + JSON.stringify(obj)
})
}
} else {
// 如果是手动检查新版本 需开启以下注释
// uni.showModal({
// title: '提示',
// content: '已是最新版本',
// showCancel: false
// })
}
})
})
}
// #endif
// #ifdef MP-WEIXIN
// 微信小程序更新检测
export function checkUpdate() {
// 获取更新管理器对象
const updateManager = uni.getUpdateManager()
updateManager.onCheckForUpdate(res => {
if (res.hasUpdate) {
updateManager.onUpdateReady(() => {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,点击确定重新启动',
showCancel: false,
success: res => {
if (res.confirm) {
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(() => {
uni.showModal({
title: '提示',
content: '检查到有新版本,但是下载失败,请检查网络设置',
showCancel: false
})
})
}
})
}
// #endif
然后在 App.vue 页面 下的 onShow 方法调用前面的方法
// App.vue
import { checkAppUpdate, checkUpdate } from '@/utils/method.js'
export default {
onShow() {
// #ifdef MP-WEIXIN
checkUpdate()
// #endif
// #ifdef APP-PLUS
checkAppUpdate()
// #endif
}
}
附带个检测微信小程序的更新~