【uniapp】app检查版本更新

安卓app更新机制:

  • 证书与包名完全一致的情况下,安装新版本的app会覆盖旧版本的app
  • 证书一致,包名不一致的情况下,安装新版本的app
  • 证书不一致,包名一致并且本机已经装了同包名的app的情况下,安装新版本app会出错

更新分为全量更新(apk包) 增量更新(wgt包)

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<template>
<view class="content">
<view>version: {{ version }}</view>
<view>versionCode: {{ versionCode }}</view>
<view>wgtVersion: {{ wgtVersion }}</view>
</view>
</template>

<script>
export default {
data() {
return {
version: '',
versionCode: '',
wgtVersion: '',
}
},
onLoad() {
this.getCurrentVersion()
},
methods: {
/**
* 当前版本信息获取
*/
getCurrentVersion() {
const systemInfo = uni.getSystemInfoSync()
this.version = systemInfo.appVersion
this.versionCode = systemInfo.appVersionCode
this.wgtVersion = systemInfo.appWgtVersion
},
/**
* 全量更新(wgt包)
*/
handleUpdateAppApk() {
// #ifdef APP-PLUS
updateApp('请求app最新版本信息的接口').then((res) => {
if (res.data.versionCode > this.versionCode) {
uni.showModal({
// 提醒用户更新 modal 框
title: '更新提示',
content: 'app有新版本,请更新',
success: (modalRes) => {
if (modalRes.confirm) {
// 可以使用 plus.runtime.openURL 打开地址下载 也可以使用 uni.downloadFile 创建下载任务进行下载(下方 wgt 更新使用该方案)
plus.runtime.openURL(res.data.downloadUrl)
}
},
})
} else {
plus.nativeUI.toast('已最新版本')
}
})
// #endif
},
/**
* 增量更新(wgt包)
*/
handleUpdateAppWgt() {
// #ifdef APP-PLUS
updateApp('请求app最新版本信息的接口').then((res) => {
if (res.data.versionCode > this.versionCode) {
// 需要更新
const downloadTask = uni.downloadFile({
url: res.data.downloadUrl, // 下载地址
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
plus.runtime.install(
downloadResult.tempFilePath,
{
// force: 是否强制安装
// true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false。
force: false,
},
function () {
console.log('安装成功...')
plus.nativeUI.showWaiting('更新完成')
setTimeout(() => {
plus.nativeUI.closeWaiting()
plus.runtime.restart() //重启app
}, 1500)
},
function (e) {
console.error('安装失败...', e)
plus.nativeUI.toast(`安装失败:${e.message}`)
}
)
}
},
fail: (item) => {
console.log(item)
},
})
downloadTask.onProgressUpdate((item) => {
console.log('下载进度:', item.progress, '%')
})
} else {
plus.nativeUI.toast('已最新版本')
}
})
// #endif
},
},
}
</script>

<style lang="scss" scoped></style>