uniapp App强制更新

需要使用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
    }
}

附带个检测微信小程序的更新~

猜你喜欢

转载自blog.csdn.net/qq_23375733/article/details/131667762