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

40 篇文章 1 订阅

思路:

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.看下实现效果(这里演示的是应用内安卓整包更新)

注意:

大坑

    

所以要使用plus.runtimegetProperty来获取版本号

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱池鱼的酱酱仔

您的鼓励是我前进的动力哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值