uniapp打包APP实现应用内整包更新或热更新

思路:

1.首先要理解更新方式的区别 静默更新、弱更新以及强制更新。

APP更新机制-静默更新、弱更新、强更新 - 知乎

2.其次要理解不同更新方式要用到的插件----------这里推荐插件应用市场的插件。

app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场,wgt静默更新 - DCloud 插件市场

3.一般来说每个APP自行发布后台管理系统一般要有放置APP信息的菜单。

4. 最后要和后端进行沟通返回的APP信息,前端在APP.vue文件进行根据个人需求进行操作。

注意:

1.仔细阅读插件市场的文档,非常可靠。

2.如果是wgt热更新那么下载地址必须以wgt结尾,否则会提示错误。如果是整包更新安卓必须是apk结尾的网址,否则会跳到浏览器下载。

3.特别强调后端返回的格式以及字段必须和组件内一致。

操作流程

1.首先进入插件市场,导入此插件到项目中。(导入插件时会有提示是否注册page,选择是,但不能是第一项

 2.其次在App.vue文件进行初始化信息配置。

 3.这里我用的是模拟接口数据来测试的。---后期需要换成后端返回的数据

updateAPPTest() {
				//#ifdef APP-PLUS
				// 获取本地应用资源版本号
				plus.runtime.getProperty(plus.runtime.appid, (inf) => {
					//获取服务器的版本号
					const data = {
						// 版本更新内容 支持<br>自动换行
						describe: '1. 修复已知问题 <br/> 2. 优化用户体验1 ',
						edition_url: 'http://192.1.1.48:80/sc.apk', //apk、wgt包下载地址或者应用市场地址  安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
						edition_force: 0, //是否强制更新 0代表否 1代表是
						package_type: 0, //0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
						edition_issue: 1, //是否发行  0否 1是 为了控制上架应用市场审核时不能弹出热更新框
						edition_number: 101, //版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
						edition_name: '1.0.1', // 版本名称 manifest里的版本名称
						edition_silence: 0, // 是否静默更新 0代表否 1代表是
					}
					//res.data.xxx根据后台返回的数据决定(我这里后端返回的是data),所以是res.data.data 
					//判断后台返回版本号是否大于当前应用版本号 && 是否发行 (上架应用市场时一定不能弹出更新提示)
					if (Number(data.edition_number) > Number(inf.versionCode) && data.edition_issue == 1) {
						console.log('找到新版本')
						//如果是wgt升级,并且是静默更新 (注意!!! 如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应)
						if (data.package_type == 1 && data.edition_silence ==
							1) {
							//调用静默更新方法 传入下载地址
							silenceUpdate(data.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(data)
							});
						}
					} else {
						console.log('已经是最新版本了')
						
						// 如果是手动检查新版本 需开启以下注释
						uni.showModal({
							title: '提示',
							content: '已是最新版本',
							showCancel: false
						})
					}

				});

				//#endif    
			},

注意后端返回的字段结果信息:

data:{
    // 版本更新内容 支持<br>自动换行
    describe: '1. 修复已知问题<br>
                2. 优化用户体验', 
    edition_url: '', //apk、wgt包下载地址或者应用市场地址  安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
    edition_force: 0, //是否强制更新 0代表否 1代表是
    package_type: 1, //0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
    edition_issue:1, //是否发行  0否 1是 为了控制上架应用市场审核时不能弹出热更新框
    edition_number:100, //版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
    edition_name:'1.0.0',// 版本名称 manifest里的版本名称
    edition_silence:0, // 是否静默更新 0代表否 1代表是
}

4.看下实现效果(这里演示的是应用内安卓整包更新)

猜你喜欢

转载自blog.csdn.net/weixin_53339757/article/details/131678190