diff --git a/common/appInit.js b/common/appInit.js index babd0fc4dbe26aec329e52f9402ce8abe24d2b43..34f8e6858dd036c7ceacc4359fb3dcadec5a48e1 100644 --- a/common/appInit.js +++ b/common/appInit.js @@ -1,4 +1,7 @@ +// #ifdef APP-PLUS 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() { // 初始化appVersion @@ -21,16 +24,25 @@ function initAppVersion() { // #ifdef APP-PLUS let appid = plus.runtime.appid; plus.runtime.getProperty(appid, (wgtInfo) => { - wgtInfo.version - let appVersion = plus.runtime; + let appVersion = plus.runtime; + let currentVersion = appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo; getApp({ allowDefault: true - }).appVersion = { + }).appVersion = { + ...currentVersion, appid, - version: appVersion, - wgtVersion: wgtInfo, - finall: appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo - } + hasNew:true + } + // 检查更新小红点 + callCheckVersion() + .then(res=>{ + if(res.result.code>0){ + // 有新版本 + getApp({ + allowDefault: true + }).appVersion.hasNew = true; + } + }) }); // #endif } diff --git a/pages/ucenter/ucenter.vue b/pages/ucenter/ucenter.vue index 8977f0ea0191925b6bb0a5c71262cc292efedbbb..9c048cc18a1db94fa88d6d1c72822b12e441ecb7 100644 --- a/pages/ucenter/ucenter.vue +++ b/pages/ucenter/ucenter.vue @@ -20,7 +20,12 @@ :clickable="true" :to="item.to" @click="ucenterListClick(item)" - > + > + + {{item.rightText}} + + + @@ -74,8 +79,9 @@ //#ifdef APP-PLUS { title: '检查更新', - rightText: `V${getApp().appVersion.finall.version}_${getApp().appVersion.finall.versionCode}`, - event:'checkVersion' + rightText: `V${getApp().appVersion.version}_${getApp().appVersion.versionCode}`, + event:'checkVersion', + showBadge:true } //#endif ], @@ -250,6 +256,26 @@ -webkit-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; +} diff --git a/uni_modules/uni-upgrade-center-app/changelog.md b/uni_modules/uni-upgrade-center-app/changelog.md index 48b9ee4442738d666bc1804bbb822a09e594c31d..74cd62c22cf526cd4d039d39ad18eef9e74a8530 100644 --- a/uni_modules/uni-upgrade-center-app/changelog.md +++ b/uni_modules/uni-upgrade-center-app/changelog.md @@ -1,3 +1,7 @@ +## 0.1.4(2021-04-13) +- 更新文档。明确云函数调用结果 +## 0.1.3(2021-04-13) +- 解耦云函数与弹框处理。utils中新增 call-check-version.js,可用于单独检测是否有更新 ## 0.1.2(2021-04-07) - 更新版本对比函数 compare ## 0.1.1(2021-04-07) diff --git a/uni_modules/uni-upgrade-center-app/package.json b/uni_modules/uni-upgrade-center-app/package.json index fbaf85dbbaccdf9788ee8fc40ee55b2c93c98973..86cd3b408a21f5d56ef33e736ec0363ea7f0573e 100644 --- a/uni_modules/uni-upgrade-center-app/package.json +++ b/uni_modules/uni-upgrade-center-app/package.json @@ -1,7 +1,7 @@ { "id": "uni-upgrade-center-app", "displayName": "升级中心 uni-upgrade-center - App", - "version": "0.1.2", + "version": "0.1.4", "description": "升级中心前台检查更新", "keywords": [ "uniCloud", diff --git a/uni_modules/uni-upgrade-center-app/readme.md b/uni_modules/uni-upgrade-center-app/readme.md index b434a383d0f4896135ebf8166eb5b9ebd8a28bb9..2f6fd08846fedeff6457a63a8b977537edc500e7 100644 --- a/uni_modules/uni-upgrade-center-app/readme.md +++ b/uni_modules/uni-upgrade-center-app/readme.md @@ -71,25 +71,46 @@ 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` - 更新应用: - - 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面 - - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包) - - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除 - - 如果本地没有包或者包不符合安装条件,则进行下载安装包 - - 点击下载会有进度条、已下载大小和下载包的大小 - - 下载完成会提示安装: - - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启 - - 如果是 原生安装包,则直接跳出去覆盖安装 - - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出 - - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中 + - 如果云函数`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面 + - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包) + - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除 + - 如果本地没有包或者包不符合安装条件,则进行下载安装包 + - 点击下载会有进度条、已下载大小和下载包的大小 + - 下载完成会提示安装: + - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启 + - 如果是 原生安装包,则直接跳出去覆盖安装 + - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出 + - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中 + +### 工具类 utils +- `call-check-version` + - 请求云函数`check-version`拿取版本检测结果 +- `check-update` + - 调用`call-check-version`并根据结果判断是否显示更新弹框 ### 云函数 - `check-version` - 检查应用更新: - - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 - - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新 - - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 - - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新 - - 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion \ No newline at end of file + - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 + - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新 + - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 + - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新 + - 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion + - 返回结果: + |code|message| + |:-:|:-:| + |0|当前版本已经是最新的,不需要更新| + |101|wgt更新| + |102|整包更新| + |-101|暂无更新或检查appid是否填写正确| + |-102|请检查传参是否填写正确| \ No newline at end of file diff --git a/uni_modules/uni-upgrade-center-app/utils/call-check-version.js b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js new file mode 100644 index 0000000000000000000000000000000000000000..722b7c442095026cbcfce6ac3813659cd0b6a658 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js @@ -0,0 +1,29 @@ +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 +} diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update.js b/uni_modules/uni-upgrade-center-app/utils/check-update.js index da21b102bb00c107ee16a86e87656a3445a7aef9..4fb4d42a190f684e65a865d5e9d8c40930c31396 100644 --- a/uni_modules/uni-upgrade-center-app/utils/check-update.js +++ b/uni_modules/uni-upgrade-center-app/utils/check-update.js @@ -1,82 +1,73 @@ +import callCheckVersion from './call-check-version' + // 推荐再App.vue中使用 const PACKAGE_INFO_KEY = '__package_info__' export default function() { // #ifdef APP-PLUS - 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: async (e) => { - if (!e.result) return; - const { - code, - message, - is_silently, // 是否静默更新 - url, // 安装包下载地址 - platform, // 安装包平台 - type // 安装包类型 - } = e.result; + callCheckVersion().then(async (e) => { + if (!e.result) return; + const { + code, + message, + is_silently, // 是否静默更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = e.result; - // 此处逻辑仅为实例,可自行编写 - if (code > 0) { - // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 - const { - fileList - } = await uniCloud.getTempFileURL({ - fileList: [url] - }); - e.result.url = fileList[0].tempFileURL + // 此处逻辑仅为实例,可自行编写 + if (code > 0) { + // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 + const { + fileList + } = await uniCloud.getTempFileURL({ + fileList: [url] + }); + e.result.url = fileList[0].tempFileURL - // 静默更新,只有wgt有 - if (is_silently) { - uni.downloadFile({ - url: e.result.url, - success: res => { - if (res.statusCode == 200) { - // 下载好直接安装,下次启动生效 - plus.runtime.install(res.tempFilePath, { - force: false - }); - } - } - }); - return; + // 静默更新,只有wgt有 + if (is_silently) { + uni.downloadFile({ + url: e.result.url, + success: res => { + if (res.statusCode == 200) { + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }); + } } + }); + return; + } - /** - * 提示升级一 - * 使用 uni.showModal - */ - // return updateUseModal(e.result) + /** + * 提示升级一 + * 使用 uni.showModal + */ + // return updateUseModal(e.result) - /** - * 提示升级二 - * 官方适配的升级弹窗,可自行替换资源适配UI风格 - */ - uni.setStorageSync(PACKAGE_INFO_KEY, e.result) - uni.navigateTo({ - url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, - fail: (err) => { - console.error('更新弹框跳转失败', err) - uni.removeStorageSync(PACKAGE_INFO_KEY) - } - }) - } else if (code < 0) { - // TODO 云函数报错处理 - console.error(message) + /** + * 提示升级二 + * 官方适配的升级弹窗,可自行替换资源适配UI风格 + */ + uni.setStorageSync(PACKAGE_INFO_KEY, e.result) + uni.navigateTo({ + url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, + fail: (err) => { + console.error('更新弹框跳转失败', err) + uni.removeStorageSync(PACKAGE_INFO_KEY) } - }, - fail: (err) => { - // TODO 云函数报错处理 - console.error(err.message) - } - }) - }); + }) + } else if (code < 0) { + // TODO 云函数报错处理 + console.error(message) + } + }).catch(err => { + // TODO 云函数报错处理 + console.error(err.message) + }) // #endif }