uni-app热更新与整包更新
整包更新:应⽤在⼤版本更新,内容更新较多时使⽤
热更新:应⽤在⼩版本更新,内容更新较少时
整体流程:
2. 对于不同设备类型,可通过 plus.LocaleLowerCase()获取。
3. 我们apk存放在oss上,有⼀个增量更新的⽂件夹,⼀个安卓apk的⽂件夹,苹果版本在商店上架
⼀. 苹果应⽤更新
1. 使⽤Property⽅法获取指定APPID对应的应⽤信息,主要获取当前app应⽤版本号。
2. 通过访问itunes.apple/cn/lookup?id=${appId},获取苹果商店中应⽤的版本号。
3. 对⽐版本号,苹果商店版本 > 当前pad版本时,有⼤版本更新(整包更新),直接从苹果商店下载新版本。
安卓下载app
4. 对⽐版本号,苹果商店版本 < 当前pad版本时,没有⼤版本更新(整包更新),此时去访问后端接⼝,查看是否有增量更新的版本,如果有,通
过plus.runtime.install下载。
⼆. 安卓应⽤更新
1. 使⽤Property⽅法获取指定APPID对应的应⽤信息,主要获取当前app应⽤版本号。
2. 访问后端接⼝查看(接⼝传⼊上⾯的版本号),此时查询的是⼤版本(整包)⽂件夹下的版本,是否有最新版本。
3. 有⼤版本版本更新时,通过后端接⼝,拿到链接,plus.runtime.openFile下载。
4. 没有⼤版本版本更新时,访问后端接⼝查增量更新⽂件夹下,有没有最新版本,如果有,通过plus.runtime.install下载。
代码:
在项⽬主页,每次进来先检查更新
// 更新检测
checkUpdate () {
Property(plus.runtime.appid, (wgtinfo) => {
const platform = plus.LocaleLowerCase()
if (platform === 'ios') {
url: `itunes.apple/cn/lookup?id=${appId}`,
success: (res) => {
const info = sults[0]    // 苹果返回的产品详情
let currentVersion = place(/\./g,'');
let newVersion = place(/\./g,'');
/
/ 苹果商店最新版本 > 当前pad版本时,有⼤新版本
if (newVersion > currentVersion) {
// 获取更新内容
} else {
// 如果没有⼤版本更新,去增量更新⽂件查有没有需要增量更新是⽂件
}
}
})
} else {
this.server.checkVersion().then(async res => {
if (de == 200) {
// 有⼤版本更新,获取更新内容,打开弹窗
if (res.data) {
// 获取更新内容
} else {
// 如果没有⼤版本更新,去增量更新⽂件查有没有需要增量更新是⽂件                        Incremental();
}
}
})
}
})
},
// 点击弹窗确认,点击下载
confirm () {
this.$refs.version.close();
this.updateOfApk()
},
// 下载apk包
updateOfApk () {
const platform = plus.LocaleLowerCase()
if (platform === 'ios') {
// ios从苹果商店下载
plus.runtime.launchApplication({
action: `itms-apps://itunes.apple/cn/app/id${appId}?mt=8`
}, function (e) {
console.log('Open system default browser failed: ' + e.message);
})
} else {
// 安卓下载从后端获取的oss上下载
}
},
// 获取当前版本更新内容
getProductInfo () {
ProductDescription().then(res => {
if (de === 200) {
// 打开弹窗,显⽰更新内容
this.$refs.version.open()
}
})
},
/
/ 增量更新
async getIncremental (currentVersion) {
try {
// 检查⼩版本更新
let res = await this.server.checkVersion()
// res.data为false时,没有有新版本
if (!res.data) return
// 有⼩版本更新,获取下载地址,进⾏增量更新
let urlData = await this.server.downloadURL()
// 接⼝报错截⽌
if (de !== 200) return
/
/ uni下载⽂件
let downUrl = await this.uniDownLoadFile()
// 接⼝报错截⽌
if (downUrl.statusCode !== 200) return
// 下载⽂件
plus.runtime.pFilePath, {
force: false
}, () => {
start(); // 重启项⽬
}, (e) => {
// 调⽤⼀个接⼝,将e返回咯
console.log(e)
});
} catch (e) {
console.log(e)
}
},
// 安卓下载地址
async getUrlToOss () {
try {