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