readme.md 4.3 KB
Newer Older
芊里 已提交
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
# 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 导入插件`,选择要导入的项目点击确定

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

				}
			}
		}
]
```

7.`/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可

### 更新下载安装`check-update.js`

*该函数在utils目录下*

1. 如果是静默更新,则不会打开更新弹框,会在后台下载后安装,下次启动应用生效

2. 如果是 iOS,则会直接打开AppStore的链接

3. 其他情况,会将`check-version`返回的结果保存在localStorage中,并跳转进入`upgrade-popup.vue`打开更新弹框

### 检查更新函数`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`,在要用的地方导入调用即可


## 项目代码说明

### 更新弹框
- `upgrade-popup.vue` - 更新应用:
	 - 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面
	 - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包)
	 - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除
	 - 如果本地没有包或者包不符合安装条件,则进行下载安装包
	 - 点击下载会有进度条、已下载大小和下载包的大小
	 - 下载完成会提示安装:
			- 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启
			- 如果是 原生安装包,则直接跳出去覆盖安装
	 - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出
	 - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中

### 云函数
- `check-version` - 检查应用更新:
	 - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
	 - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新
	 - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
	 - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新
	 - 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion