From a921045c32408afe043cc9cb98ce4e8fe321b0a3 Mon Sep 17 00:00:00 2001 From: linju <8432241+linjuDcloud@user.noreply.gitee.com> Date: Tue, 13 Apr 2021 16:29:30 +0800 Subject: [PATCH] 21 --- .gitignore | 3 +- manifest.json | 6 +- .../ucenter/edit/uploadCutImageToUnicloud.vue | 2 +- .../cloudfunctions/common/uni-id/config.json | 52 - .../uni-quick-login/uni-quick-login.vue | 5 +- .../uni-upgrade-center-app/changelog.md | 9 + .../uni-upgrade-center-app/package.json | 158 +-- .../pages/upgrade-popup.vue | 928 +++++++++--------- uni_modules/uni-upgrade-center-app/readme.md | 139 +-- .../check-version/check-version.param.json | 2 +- .../cloudfunctions/check-version/index.js | 38 +- .../utils/check-update.js | 226 +++-- 12 files changed, 844 insertions(+), 724 deletions(-) delete mode 100644 uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json diff --git a/.gitignore b/.gitignore index 269295a6..871ae1ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ unpackage/ .hbuilderx node_modules -.DS_Store \ No newline at end of file +.DS_Store +uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json \ No newline at end of file diff --git a/manifest.json b/manifest.json index 9f17b324..d3019060 100644 --- a/manifest.json +++ b/manifest.json @@ -77,15 +77,15 @@ "oauth" : { "apple" : {}, "weixin" : { - "appid" : "wx0411fa6a39d61297", - "appsecret" : "", + "appid" : "wxffdd8fa6ec4ef2a0", + "appsecret" : "6c9119430d7be0a147bcbbb73ef33acf", "UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E" }, "univerify" : {} }, "share" : { "weixin" : { - "appid" : "wx0411fa6a39d61297", + "appid" : "wxffdd8fa6ec4ef2a0", "UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E", "_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e" } diff --git a/pages/ucenter/edit/uploadCutImageToUnicloud.vue b/pages/ucenter/edit/uploadCutImageToUnicloud.vue index f81a23ae..839b03d6 100644 --- a/pages/ucenter/edit/uploadCutImageToUnicloud.vue +++ b/pages/ucenter/edit/uploadCutImageToUnicloud.vue @@ -1,6 +1,6 @@ diff --git a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json deleted file mode 100644 index ab82b621..00000000 --- a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "passwordSecret": "passwordSecret-demo", - "tokenSecret": "tokenSecret-demo", - "tokenExpiresIn": 7200, - "tokenExpiresThreshold": 600, - "passwordErrorLimit": 6, - "bindTokenToDevice": true, - "passwordErrorRetryTime": 3600, - "autoSetInviteCode": false, - "forceInviteCode": false, - "app-plus": { - "tokenExpiresIn": 2592000, - "oauth": { - "weixin": { - "appid": "wx0411fa6a39d61297", - "appsecret": "6c9119430d7be0a147bcbbb73ef33acf" - }, - "apple": { - "bundleId": "io.dcloud.game.cat" - } - } - }, - "mp-weixin": { - "oauth": { - "weixin": { - "appid": "wx999bf02c8e05dfc9", - "appsecret": "b5f608afd332b2c0ded7e6b98ca4ccd3" - } - } - }, - "mp-alipay": { - "oauth": { - "alipay": { - "appid": "alipay appid", - "privateKey": "alipay privateKey" - } - } - }, - "service": { - "sms": { - "name": "DCloud", - "codeExpiresIn": 300, - "smsKey": "71a19f38c954f7d768d68a050486bf15", - "smsSecret": "d6c424b702d73baa3b6e1a1452469213" - }, - "univerify": { - "appid": "__UNI__BC54A00", - "apiKey": "d1e36bcd497b3795434d900dcfdd44dc", - "apiSecret": "2feb378ff1114362b20ac179b572293e" - } - } -} diff --git a/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue b/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue index 01339c58..8868a0d1 100644 --- a/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue +++ b/uni_modules/uni-quick-login/components/uni-quick-login/uni-quick-login.vue @@ -98,12 +98,15 @@ let oauthService = this.oauthServices.find((service) => service.id == type) // #ifdef APP-PLUS //uni.showLoading({mask: true}); - + console.log(type,231); //请勿直接使用前端获取的unionid或openid直接用于登陆,前端的数据都是不可靠的 if(type=='weixin'){ oauthService.authorize(({code})=>{ console.log(code); this.quickLogin({code},type) + }, + err=>{ + console.log(err); }) } diff --git a/uni_modules/uni-upgrade-center-app/changelog.md b/uni_modules/uni-upgrade-center-app/changelog.md index 65d92778..48b9ee44 100644 --- a/uni_modules/uni-upgrade-center-app/changelog.md +++ b/uni_modules/uni-upgrade-center-app/changelog.md @@ -1,3 +1,12 @@ +## 0.1.2(2021-04-07) +- 更新版本对比函数 compare +## 0.1.1(2021-04-07) +- 修复 腾讯云空间下载链接不能下载问题 +## 0.1.0(2021-04-07) +- 新增使用uni.showModal提示升级示例 +- 修改iOS升级提示方式 +## 0.0.7(2021-04-02) +- 修复在iOS上打开弹框报错 ## 0.0.6(2021-04-01) - 兼容旧版本安卓 ## 0.0.5(2021-04-01) diff --git a/uni_modules/uni-upgrade-center-app/package.json b/uni_modules/uni-upgrade-center-app/package.json index fe0caf71..fbaf85db 100644 --- a/uni_modules/uni-upgrade-center-app/package.json +++ b/uni_modules/uni-upgrade-center-app/package.json @@ -1,80 +1,80 @@ -{ - "id": "uni-upgrade-center-app", - "displayName": "升级中心 uni-upgrade-center - App", - "version": "0.0.6", - "description": "升级中心前台检查更新", - "keywords": [ - "uniCloud", - "admin", - "update", - "升级", - "wgt" -], - "repository": "https://gitee.com/dcloud/uni-upgrade-center/tree/master/uni_modules/uni-upgrade-center-app", - "engines": { - "HBuilderX": "^3.1.0" - }, - "dcloudext": { - "category": [ - "uniCloud", - "云端一体页面模板" - ], - "sale": { - "regular": { - "price": "0.00" - }, - "sourcecode": { - "price": "0.00" - } - }, - "contact": { - "qq": "" - }, - "declaration": { - "ads": "无", - "data": "插件不采集任何数据", - "permissions": "无" - }, - "npmurl": "" - }, - "uni_modules": { - "dependencies": [], - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "y", - "aliyun": "y" - }, - "client": { - "App": { - "app-vue": "u", - "app-nvue": "u" - }, - "H5-mobile": { - "Safari": "u", - "Android Browser": "u", - "微信浏览器(Android)": "u", - "QQ浏览器(Android)": "u" - }, - "H5-pc": { - "Chrome": "u", - "IE": "u", - "Edge": "u", - "Firefox": "u", - "Safari": "u" - }, - "小程序": { - "微信": "u", - "阿里": "u", - "百度": "u", - "字节跳动": "u", - "QQ": "u" - }, - "快应用": { - "华为": "u", - "联盟": "u" - } - } - } - } +{ + "id": "uni-upgrade-center-app", + "displayName": "升级中心 uni-upgrade-center - App", + "version": "0.1.2", + "description": "升级中心前台检查更新", + "keywords": [ + "uniCloud", + "admin", + "update", + "升级", + "wgt" +], + "repository": "https://gitee.com/dcloud/uni-upgrade-center/tree/master/uni_modules/uni-upgrade-center-app", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "uniCloud", + "云端一体页面模板" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } } diff --git a/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue index 0b70fa08..00d928b3 100644 --- a/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue +++ b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue @@ -1,457 +1,501 @@ - - - - - diff --git a/uni_modules/uni-upgrade-center-app/readme.md b/uni_modules/uni-upgrade-center-app/readme.md index a1582b24..b434a383 100644 --- a/uni_modules/uni-upgrade-center-app/readme.md +++ b/uni_modules/uni-upgrade-center-app/readme.md @@ -1,94 +1,95 @@ -# uni-upgrade-center - App - -### 概述 - +# uni-upgrade-center - App + +### 概述 + > 统一管理App及App在`Android`、`iOS`平台上`App安装包`和`wgt资源包`的发布升级 > 本插件为升级中心前台检查更新,后台Admin管理系统请点击查看 [uni-upgrade-center](https://ext.dcloud.net.cn/plugin?id=4470) -### 基于uni-upgrade-center的App前台检查升级插件 - - 一键式检查更新,统一整包与wgt资源包更新 - - 好看、实用、可自定义、可拓展的前台更新弹框 - -## 安装指引 - -1. 使用`HBuilderX 3.1.0+`,因为要使用到`uni_modules` - -3. 在插件市场打开本插件页面,在右侧点击`使用 HBuilderX 导入插件`,选择要导入的项目点击确定 +### 基于uni-upgrade-center的App前台检查升级插件 + - 一键式检查更新,统一整包与wgt资源包更新 + - 好看、实用、可自定义、可拓展的前台更新弹框 +## 安装指引 + +1. 使用`HBuilderX 3.1.0+`,因为要使用到`uni_modules` + +3. 在插件市场打开本插件页面,在右侧点击`使用 HBuilderX 导入插件`,选择要导入的项目点击确定 + 5. 找到`/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version`,右键上传部署 -6. 在`pages.json`中添加页面路径 -```json -"pages": [ - // ……其他页面配置 - { - "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup", - "style": { - "disableScroll": true, - "app-plus": { - "backgroundColorTop": "transparent", - "background": "transparent", - "titleNView": false, - "scrollIndicator": false, - "popGesture": "none", - "animationType": "fade-in", - "animationDuration": 200 - - } - } - } -] +6. 在`pages.json`中添加页面路径 +```json +"pages": [ + // ……其他页面配置 + { + "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup", + "style": { + "disableScroll": true, + "app-plus": { + "backgroundColorTop": "transparent", + "background": "transparent", + "titleNView": false, + "scrollIndicator": false, + "popGesture": "none", + "animationType": "fade-in", + "animationDuration": 200 + + } + } + } +] ``` -7. 将`/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可 +7. 将`/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可 + +8. 升级弹框可自行编写,也可以使用`uni.showModal`,或使用现有的升级弹框样式,如果不满足UI需求请自行替换资源文件。在`utils/check-update.js`中都有实例。 ### 更新下载安装`check-update.js` *该函数在utils目录下* - -1. 如果是静默更新,则不会打开更新弹框,会在后台下载后安装,下次启动应用生效 - + +1. 如果是静默更新,则不会打开更新弹框,会在后台下载后安装,下次启动应用生效 + 2. 如果是 iOS,则会直接打开AppStore的链接 -3. 其他情况,会将`check-version`返回的结果保存在localStorage中,并跳转进入`upgrade-popup.vue`打开更新弹框 +3. 其他情况,会将`check-version`返回的结果保存在localStorage中,并跳转进入`upgrade-popup.vue`打开更新弹框 -### 检查更新函数`check-version` +### 检查更新函数`check-version` *该函数在uniCloud/cloudfunctions目录下* - -1. 使用检查更新需要传递三个参数 `appid`、`appVersion`、`wgtVersion` - -2. `appid` 使用 plus.runtime.appid 获取,*注:真机运行时为固定值HBuilder,在调试的时候请使用本地调试云函数* - -3. `appVersion` 使用 plus.runtime.version 获取 - -4. `wgtVersion` 使用 plus.runtime.getProperty(plus.runtime.appid,(wgtInfo) => { wgtInfo.version }) 获取 - -5. `check-version`云函数内部会自动获取 App 平台 - -6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要用的地方导入调用即可 - + +1. 使用检查更新需要传递三个参数 `appid`、`appVersion`、`wgtVersion` + +2. `appid` 使用 plus.runtime.appid 获取,*注:真机运行时为固定值HBuilder,在调试的时候请使用本地调试云函数* + +3. `appVersion` 使用 plus.runtime.version 获取 + +4. `wgtVersion` 使用 plus.runtime.getProperty(plus.runtime.appid,(wgtInfo) => { wgtInfo.version }) 获取 + +5. `check-version`云函数内部会自动获取 App 平台 + +6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要检查更新的地方导入调用即可 ## 项目代码说明 -### 更新弹框 -- `upgrade-popup.vue` - 更新应用: - - 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面 - - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包) - - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除 - - 如果本地没有包或者包不符合安装条件,则进行下载安装包 - - 点击下载会有进度条、已下载大小和下载包的大小 +### 更新弹框 +- `upgrade-popup.vue` - 更新应用: + - 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面 + - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包) + - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除 + - 如果本地没有包或者包不符合安装条件,则进行下载安装包 + - 点击下载会有进度条、已下载大小和下载包的大小 - 下载完成会提示安装: - - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启 - - 如果是 原生安装包,则直接跳出去覆盖安装 - - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出 + - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启 + - 如果是 原生安装包,则直接跳出去覆盖安装 + - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出 - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中 -### 云函数 -- `check-version` - 检查应用更新: - - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 - - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新 - - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 - - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新 +### 云函数 +- `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 diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json index 5dde9b04..c53f322a 100644 --- a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json @@ -3,7 +3,7 @@ // 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam { - "appid": "uni.UNIBC54A00", + "appid": "__YOUR_APPID__", "appVersion": "2.2.0", "wgtVersion": "2.2.2" } diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js index 047dfacd..24087d38 100644 --- a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js @@ -124,14 +124,44 @@ exports.main = async (event, context) => { }; /** - * 对比版本号,如需要,请自行修改判断规则 + * 对比版本号,如需要,请自行修改判断规则 + * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的 * @param {Object} v1 * @param {Object} v2 * v1 > v2 return 1 * v1 < v2 return -1 * v1 == v2 return 0 */ -function compare(v1 = 0, v2 = 0) { - // '1.2.5' > '1.2.4' 类似的版本号可以直接对比 - return v1 > v2 ? 1 : v1 < v2 ? -1 : 0; +function compare(v1 = '0', v2 = '0') { + v1 = String(v1).split('.') + v2 = String(v2).split('.') + const minVersionLens = Math.min(v1.length, v2.length); + + let result = 0; + for (let i = 0; i < minVersionLens; i++) { + const curV1 = Number(v1[i]) + const curV2 = Number(v2[i]) + + if (curV1 > curV2) { + result = 1 + break; + } else if(curV1 < curV2) { + result = -1 + break; + } + } + + if (result === 0 && (v1.length !== v2.length)) { + const v1BiggerThenv2 = v1.length > v2.length; + const maxLensVersion = v1BiggerThenv2 ? v1 : v2; + for (let i = minVersionLens; i < maxLensVersion.length; i++) { + const curVersion = Number(maxLensVersion[i]) + if (curVersion > 0) { + v1BiggerThenv2 ? result = 1 : result = -1 + break; + } + } + } + + return result; } 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 11520671..da21b102 100644 --- a/uni_modules/uni-upgrade-center-app/utils/check-update.js +++ b/uni_modules/uni-upgrade-center-app/utils/check-update.js @@ -1,73 +1,157 @@ -// 推荐再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: (e) => { - if (!e.result) return; - const { - code, - message, - is_silently, // 是否静默更新 - url, // 安装包下载地址 - platform, // 安装包平台 - type // 安装包类型 - } = e.result; - // 此处逻辑仅为实例,可自行编写 +// 推荐再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; + + // 此处逻辑仅为实例,可自行编写 if (code > 0) { - // 静默更新,只有wgt有 - if (is_silently) { - downloadTask = uni.downloadFile({ - url: this.url, - success: res => { - if (res.statusCode == 200) { - // 下载好直接安装,下次启动生效 - plus.runtime.install(res.tempFilePath, { - force: false - }); - } - } - }); - return; - } - - if (type === 'native_app' && platform.includes('iOS')) { - // iOS 跳转 AppStore 商店 - plus.runtime.openURL(url); - return; - } - - 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) - } - }, - fail: (err) => { - // TODO 云函数报错处理 - console.error(err.message) - } - }) - }); - // #endif + // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 + 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; + } + + /** + * 提示升级一 + * 使用 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) + } + }, + fail: (err) => { + // TODO 云函数报错处理 + console.error(err.message) + } + }) + }); + // #endif +} + +/** + * 使用 uni.showModal 升级 + */ +function updateUseModal(packageInfo) { + const { + title, // 标题 + contents, // 升级内容 + is_mandatory, // 是否强制更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = packageInfo; + + let isWGT = type === 'wgt' + let isiOS = !isWGT ? platform.includes('iOS') : false; + let confirmText = isiOS ? '立即跳转更新' : '立即下载更新' + + return uni.showModal({ + title, + content: contents, + showCancel: !is_mandatory, + confirmText, + success: res => { + if (res.cancel) return; + + // 安装包下载 + if (isiOS) { + plus.runtime.openURL(url); + return; + } + + uni.showToast({ + title: '后台下载中……', + duration: 1000 + }); + + // wgt 和 安卓下载更新 + downloadTask = uni.downloadFile({ + url, + success: res => { + if (res.statusCode !== 200) { + console.error('下载安装包失败', err); + return; + } + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }, () => { + if (is_mandatory) { + //更新完重启app + plus.runtime.restart(); + return; + } + uni.showModal({ + title: '安装成功是否重启?', + success: res => { + if (res.confirm) { + //更新完重启app + plus.runtime.restart(); + } + } + }); + }, err => { + uni.showModal({ + title: '更新失败', + content: err + .message, + showCancel: false + }); + }); + } + }); + } + }); } -- GitLab