Skip to content

Commit

Permalink
feat: update onPushyEvents
Browse files Browse the repository at this point in the history
  • Loading branch information
sunnylqm committed Oct 28, 2023
1 parent 06a7fe2 commit e237482
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 27 deletions.
102 changes: 76 additions & 26 deletions site/docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type: 开发指南

#### downloadRootDir

下载的根目录。你可以使用 react-native-fs 等第三方组件检查其中的内容
下载的根目录。你可以使用`react-native-fs`等第三方组件读取其中的内容

---

Expand Down Expand Up @@ -46,27 +46,27 @@ type: 开发指南

1. `{expired: true}`:该应用原生包版本被设置为过期(或已从 pushy 服务器中删除,或从未上传),需要前往应用市场下载新的版本(在设置中填写 downloadUrl)。

```
{
expired: true,
downloadUrl: 'http://appstore/downloadUrl',
}
```js
{
expired: true,
downloadUrl: 'http://appstore/downloadUrl',
}
```

2. `{upToDate: true}`:当前已经更新到最新,无需进行更新。

3. `{update: true}`:当前有新版本可以更新。info 的`name``description`字段可以用于提示用户,而`metaInfo`字段则可以根据你的需求自定义一些标记(如是否静默更新、是否强制更新等等,自己根据标记的属性做一些条件流程控制),具体用法可参考[场景实践](bestpractice.html#%E5%85%83%E4%BF%A1%E6%81%AFmeta-info%E7%9A%84%E4%BD%BF%E7%94%A8)。另外还有几个字段,包含了热更新文件的下载地址,

```
{
update: true,
name: '1.0.3-rc',
hash: 'hash',
description: '添加聊天功能\n修复商城页面BUG',
metaInfo: '{"silent":true}',
pdiffUrl: 'http://update-packages.reactnative.cn/hash',
diffUrl: 'http://update-packages.reactnative.cn/hash',
}
```js
{
update: true,
name: '1.0.3-rc',
hash: 'hash',
description: '添加聊天功能\n修复商城页面BUG',
metaInfo: '{"silent":true}',
pdiffUrl: 'http://update-packages.reactnative.cn/hash',
diffUrl: 'http://update-packages.reactnative.cn/hash',
}
```

---
Expand Down Expand Up @@ -96,6 +96,17 @@ const hash = await downloadUpdate(

下载更新的 apk 包并直接安装。`url`必须为可直接下载到 apk 文件的地址,`onDownloadProgress`为可选的下载进度回调函数,可根据回调参数自行设计进度的展示。自`v5.9.0`版本起可用。

注意从`v9.1.0`版本起,要使用这个功能需要在`AndroidManifest.xml`中手动添加安装权限,如果需要考虑 Android 7.0 以下的客户,则还需要添加外部存储权限。

```xml
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

<!-- 如果需要考虑Android 7.0以下的客户,则还需要添加外部存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```

注意某些应用市场可能会因为上述权限拒绝应用上架。去掉上述两个权限并不影响热更新功能。

---

#### function markSuccess()
Expand All @@ -110,12 +121,12 @@ const hash = await downloadUpdate(

返回值示例:

```
{
name: '1.0.3-rc',
description: '添加聊天功能\n修复商城页面BUG',
metaInfo: '{"silent":true}',
}
```js
{
name: '1.0.3-rc',
description: '添加聊天功能\n修复商城页面BUG',
metaInfo: '{"silent":true}',
}
```

---
Expand All @@ -132,6 +143,49 @@ const hash = await downloadUpdate(

---

#### function simpleUpdate(App: ComponentType, { appKey: string; onPushyEvents?: ({ type: EventType; data: EventData }) => void })

极简热更新集成,示例请见[集成文档](/docs/integration.html#极简快速集成),其中`onPushyEvents`参数请看下面的方法说明。

---

#### function onPushyEvents(({ type: EventType; data: EventData }) => void)

发生某个事件时的回调,可用于上报统计数据。自`v8.4.0`版本后可用。其中回调参数构型具体如下:

```ts
// 回调事件类型
export type EventType =
| 'rollback' // 回滚
| 'errorChecking' // 查询热更时出错
| 'checking' // 正在查询热更
| 'downloading' // 正在下载热更
| 'errorUpdate' // 热更时出错
| 'markSuccess' // 热更后成功标记
| 'downloadingApk' // 正在下载apk
| 'rejectStoragePermission' // 下载apk前申请存储权限被用户拒绝
| 'errorStoragePermission' // 下载apk前申请存储权限出错
| 'errowDownloadAndInstallApk'; // 下载或安装apk时出错

// 回调事件数据
export interface EventData {
currentVersion: string; // 当前版本hash
cInfo: {
pushy: string; // 当前pushy版本
rn: string; // 当前rn版本
os: string; // 当前操作系统及版本
uuid: string; // 用户标识符
};
packageVersion: string; // 原生包版本
buildTime: number; // 原生包编译时间戳
message?: string; // 相关说明信息
rolledBackVersion?: string; // 热更失败,回滚后的版本hash
newVersion?: string; // 已下载但热更失败的hash
}
```

---

### Android 方法

#### UpdateContext.setCustomInstanceManager(ReactInstanceManager instanceManager)
Expand All @@ -149,7 +203,3 @@ mReactInstanceManager = ReactInstanceManager.builder()
.build();
UpdateContext.setCustomInstanceManager(mReactInstanceManager);
```

### iOS 方法

待补充
13 changes: 12 additions & 1 deletion site/docs/integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@ class App extends Component {
}

// 对根组件使用simpleUpdate方法封装后导出
export default simpleUpdate(App, { appKey });
export default simpleUpdate(App, {
appKey,
onPushyEvents: ({ type, data }) => {
// 热更成功或报错的事件回调
// 可上报自有或第三方数据统计服务
},
});
```

此方式默认在 App 启动,以及从后台切换到前台时触发更新检查,弹出提示的内容也固定。如需自定义触发时机,以及修改界面提示等,请参考下面的自定义集成方式。
Expand Down Expand Up @@ -104,10 +110,15 @@ import {
switchVersionLater,
markSuccess,
downloadAndInstallApk,
onPushyEvents,
} from 'react-native-update';

import _updateConfig from './update.json';
const { appKey } = _updateConfig[Platform.OS];
onPushyEvents(({ type, data }) => {
// 热更成功或报错的事件回调
// 可上报自有或第三方数据统计服务
});

export default class MyProject extends Component {
state = {
Expand Down

0 comments on commit e237482

Please sign in to comment.