提交 db11835d 编写于 作者: 芊里

检查更新完成

上级 e89739ed
// #ifdef APP-PLUS
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'; import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version';
// #endif
export default function() { export default function() {
// 初始化appVersion // 初始化appVersion
...@@ -21,16 +24,25 @@ function initAppVersion() { ...@@ -21,16 +24,25 @@ function initAppVersion() {
// #ifdef APP-PLUS // #ifdef APP-PLUS
let appid = plus.runtime.appid; let appid = plus.runtime.appid;
plus.runtime.getProperty(appid, (wgtInfo) => { plus.runtime.getProperty(appid, (wgtInfo) => {
wgtInfo.version let appVersion = plus.runtime;
let appVersion = plus.runtime; let currentVersion = appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo;
getApp({ getApp({
allowDefault: true allowDefault: true
}).appVersion = { }).appVersion = {
...currentVersion,
appid, appid,
version: appVersion, hasNew:true
wgtVersion: wgtInfo, }
finall: appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo // 检查更新小红点
} callCheckVersion()
.then(res=>{
if(res.result.code>0){
// 有新版本
getApp({
allowDefault: true
}).appVersion.hasNew = true;
}
})
}); });
// #endif // #endif
} }
......
...@@ -20,7 +20,12 @@ ...@@ -20,7 +20,12 @@
:clickable="true" :clickable="true"
:to="item.to" :to="item.to"
@click="ucenterListClick(item)" @click="ucenterListClick(item)"
></uni-list-item> >
<view v-if="item.showBadge" class="item-footer" slot="footer">
<text class="item-footer-text">{{item.rightText}}</text>
<view class="item-footer-badge"></view>
</view>
</uni-list-item>
</uni-list> </uni-list>
</view> </view>
</template> </template>
...@@ -74,8 +79,9 @@ ...@@ -74,8 +79,9 @@
//#ifdef APP-PLUS //#ifdef APP-PLUS
{ {
title: '检查更新', title: '检查更新',
rightText: `V${getApp().appVersion.finall.version}_${getApp().appVersion.finall.versionCode}`, rightText: `V${getApp().appVersion.version}_${getApp().appVersion.versionCode}`,
event:'checkVersion' event:'checkVersion',
showBadge:true
} }
//#endif //#endif
], ],
...@@ -250,6 +256,26 @@ ...@@ -250,6 +256,26 @@
-webkit-transform: scaleY(0.2); -webkit-transform: scaleY(0.2);
transform: scaleY(0.2); transform: scaleY(0.2);
} }
/* #endif */ /* #endif */
.item-footer{
flex-direction: row;
align-items: center;
}
.item-footer-text{
color: #999;
font-size: 24rpx;
padding-right: 10rpx;
}
.item-footer-badge{
width: 20rpx;
height: 20rpx;
/* #ifndef APP-NVUE */
border-radius: 50%;
/* #endif */
/* #ifdef APP-NVUE */
border-radius: 10rpx;
/* #endif */
background-color: #DD524D;
}
</style> </style>
## 0.1.4(2021-04-13)
- 更新文档。明确云函数调用结果
## 0.1.3(2021-04-13)
- 解耦云函数与弹框处理。utils中新增 call-check-version.js,可用于单独检测是否有更新
## 0.1.2(2021-04-07) ## 0.1.2(2021-04-07)
- 更新版本对比函数 compare - 更新版本对比函数 compare
## 0.1.1(2021-04-07) ## 0.1.1(2021-04-07)
......
{ {
"id": "uni-upgrade-center-app", "id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App", "displayName": "升级中心 uni-upgrade-center - App",
"version": "0.1.2", "version": "0.1.4",
"description": "升级中心前台检查更新", "description": "升级中心前台检查更新",
"keywords": [ "keywords": [
"uniCloud", "uniCloud",
......
...@@ -71,25 +71,46 @@ ...@@ -71,25 +71,46 @@
6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要检查更新的地方导入调用即可 6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要检查更新的地方导入调用即可
**Tips**
1. `check-version`云函数内部有版本对比函数(compare)。
- 使用多段式版本格式(如:"3.0.0.0.0.1.0.1", "3.0.0.0.0.1")。如果不满足对比规则,请自行修改。
- 如果修改,请将*pages/upgrade-popup.vue**compare*函数一并修改
## 项目代码说明 ## 项目代码说明
### 更新弹框 ### 更新弹框
- `upgrade-popup.vue` - 更新应用: - `upgrade-popup.vue` - 更新应用:
- 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面 - 如果云函数`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面
- 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包) - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包)
- 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除 - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除
- 如果本地没有包或者包不符合安装条件,则进行下载安装包 - 如果本地没有包或者包不符合安装条件,则进行下载安装包
- 点击下载会有进度条、已下载大小和下载包的大小 - 点击下载会有进度条、已下载大小和下载包的大小
- 下载完成会提示安装: - 下载完成会提示安装:
- 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启 - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启
- 如果是 原生安装包,则直接跳出去覆盖安装 - 如果是 原生安装包,则直接跳出去覆盖安装
- 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出 - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出
- 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中 - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中
### 工具类 utils
- `call-check-version`
- 请求云函数`check-version`拿取版本检测结果
- `check-update`
- 调用`call-check-version`并根据结果判断是否显示更新弹框
### 云函数 ### 云函数
- `check-version` - 检查应用更新: - `check-version` - 检查应用更新:
- 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
- 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新 - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新
- 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
- 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新 - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新
- 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion - 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
\ No newline at end of file - 返回结果:
|code|message|
|:-:|:-:|
|0|当前版本已经是最新的,不需要更新|
|101|wgt更新|
|102|整包更新|
|-101|暂无更新或检查appid是否填写正确|
|-102|请检查传参是否填写正确|
\ No newline at end of file
export default function() {
// #ifdef APP-PLUS
return new Promise((resolve, reject) => {
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uniCloud.callFunction({
name: 'check-version',
data: {
appid: plus.runtime.appid,
appVersion: plus.runtime.version,
wgtVersion: widgetInfo.version
},
success: (e) => {
resolve(e)
},
fail: (error) => {
reject(error)
}
})
})
})
// #endif
// #ifndef APP-PLUS
return new Promise((resolve, reject) => {
reject({
message: '请在App中使用'
})
})
// #endif
}
import callCheckVersion from './call-check-version'
// 推荐再App.vue中使用 // 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__' const PACKAGE_INFO_KEY = '__package_info__'
export default function() { export default function() {
// #ifdef APP-PLUS // #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { callCheckVersion().then(async (e) => {
uniCloud.callFunction({ if (!e.result) return;
name: 'check-version', const {
data: { code,
appid: plus.runtime.appid, message,
appVersion: plus.runtime.version, is_silently, // 是否静默更新
wgtVersion: widgetInfo.version url, // 安装包下载地址
}, platform, // 安装包平台
success: async (e) => { type // 安装包类型
if (!e.result) return; } = e.result;
const {
code,
message,
is_silently, // 是否静默更新
url, // 安装包下载地址
platform, // 安装包平台
type // 安装包类型
} = e.result;
// 此处逻辑仅为实例,可自行编写 // 此处逻辑仅为实例,可自行编写
if (code > 0) { if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const { const {
fileList fileList
} = await uniCloud.getTempFileURL({ } = await uniCloud.getTempFileURL({
fileList: [url] fileList: [url]
}); });
e.result.url = fileList[0].tempFileURL e.result.url = fileList[0].tempFileURL
// 静默更新,只有wgt有 // 静默更新,只有wgt有
if (is_silently) { if (is_silently) {
uni.downloadFile({ uni.downloadFile({
url: e.result.url, url: e.result.url,
success: res => { success: res => {
if (res.statusCode == 200) { if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效 // 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, { plus.runtime.install(res.tempFilePath, {
force: false force: false
}); });
} }
}
});
return;
} }
});
return;
}
/** /**
* 提示升级一 * 提示升级一
* 使用 uni.showModal * 使用 uni.showModal
*/ */
// return updateUseModal(e.result) // return updateUseModal(e.result)
/** /**
* 提示升级二 * 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格 * 官方适配的升级弹窗,可自行替换资源适配UI风格
*/ */
uni.setStorageSync(PACKAGE_INFO_KEY, e.result) uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
uni.navigateTo({ uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => { fail: (err) => {
console.error('更新弹框跳转失败', err) console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY) uni.removeStorageSync(PACKAGE_INFO_KEY)
}
})
} else if (code < 0) {
// TODO 云函数报错处理
console.error(message)
} }
}, })
fail: (err) => { } else if (code < 0) {
// TODO 云函数报错处理 // TODO 云函数报错处理
console.error(err.message) console.error(message)
} }
}) }).catch(err => {
}); // TODO 云函数报错处理
console.error(err.message)
})
// #endif // #endif
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册