# Hotfix配置

热更新能够不提交应用商店审核而修改 APP 内容,使得 app 的迭代变的非常灵活.

`MogoH5+`在`1.3.0`后加入了`热更新/安装更新`的集成.同时,我们的`热更新服务器`也在内测中,将在不久公测使用.您无需后端就可以完成整个软件的`热更新/安装更新`服务.

## 介绍

在使用热更新前,请看完这份介绍再使用.

### 热更新

对于安卓来说,热更新是没有任何问题的,但是苹果您可以看下面这段话.

#### App store 应用更新说明(引自 dcloud)

> 应用资源更新肯定是违反 apple 政策的，但目前看起来它也不管。你在官网案例那里下载 Appstore 版本的那些 app，大多启动后都会提示更新，反正也都没下架。如果你不是很大的公司，apple 不会理睬你。如果你是大公司，建议不要做整体更新，每次更新几个页面，也不要提示更新后需要重启，这样会安全点。

作者本人的实践中也经常使用热更新,名声不大,不频繁基本上可以自由使用.
同样,我们加入了`静默更新`这种比较无脑的更新.

### 安装更新

安装更新在这里指的就是更新大版本,比如添加了模块,必须重新安装.

#### 在安卓的安装更新

1.  可以让 APP 提示,然后用户选择自己下载安装
2.  应用商店更新

#### 在苹果的安装更新

1.  必须提交 AppStore 提交审核

在这里顺便提一下,苹果用户的习惯一般是自己主动更新.
在苹果应用商店的大厂 app (微信,淘宝,京东) 更新几乎不会受到 app 的更新推送,也没有所谓`检查更新`的功能,也就是说,更新是用户主动操作的.我们的`迭代`同样也遵循这条`行规`.


## Hotfix参数

|参数|说明|类型|
|-|-|---|
|`url`|更新请求地址|string|
|`before(data)`| `data`返回的是请求后的`json`数据; 可在函数中执行安装前进行的操作,在此函数中,可以做一些确认操作,返回`Promise.resolve()`则执行下载安装,不返回或返回其他则不执行下载安装|`Promise`|
|`success`|安装完成后执行的动作,比如重启app|`void`|
|`error(e)`|返回error对象,一般在调试中使用|`Error`|
|`onProgress(n)`|下载进度,`n`为0-100的下载进度|`int`|



## 后端接收的数据格式

`checkUpdate(url)` 是以 `POST` 去访问 URL 的.数据类型为`application/json`

| 名称    | 描述                            | 类型   |
| ------- | ------------------------------- | ------ |
| version | app 当前的版本 ,如 2.1.0        | string |
| os      | app 设备的系统信息 比如系统版本 | json   |
| device  | app 设备的设备信息 比如 uuid    | json   |

## 后端返回的数据格式

下面是一个完整的数据返回 返回格式为`application/json` ,返回状态码为`200`.

> 注意 : 返回`200`以外的状态码将不被处理,如果想自行处理可以改写代码

| 名称           | 描述                                                            | 参数                     |
| -------------- | --------------------------------------------------------------- | ------------------------ |
| name           | 版本号 如果检测的版本大于本地版本就会更新                       | string                   |
| title          | 升级提示标题                                                    | string                   |
| description    | 升级提示内容                                                    | string                   |
| platform       | 符合升级的平台 ios:升级苹果 android:升级安卓 both:都更新        | `ios` ,`android`, `both` |
| hotupdate_type | 更新提示 silence:静默更新 tip:提示更新 (apk 的安装是需要提示的) | `silence`,`tip`          |
| android_url    | 更新下载地址 以`.apk`,`.wgt`结尾的 http 地址                    | url                      |
