Skip to content

Commit

Permalink
Add getCurrentVersionInfo to PushyContext interface
Browse files Browse the repository at this point in the history
  • Loading branch information
sunnylqm committed Feb 25, 2024
1 parent da73b83 commit a294d6c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 23 deletions.
17 changes: 12 additions & 5 deletions site/pages/docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ const {
dismissError,
downloadUpdate,
downloadAndInstallApk,
getCurrentVersionInfo,
currentHash,
packageVersion,
client,
Expand Down Expand Up @@ -129,7 +130,13 @@ interface PushyContext {
downloadUpdate: () => Promise<void>;
// 下载并安装apk
downloadAndInstallApk: (url: string) => Promise<void>;
// 当前需要热更的版本hash
// 获取当前已热更版本的信息
getCurrentVersionInfo: () => Promise<{
name?: string;
description?: string;
metaInfo?: string;
}>;
// 当前的版本hash
currentHash: string;
// 当前的原生版本号
packageVersion: string;
Expand Down Expand Up @@ -183,9 +190,9 @@ interface PushyContext {

#### async function checkUpdate()

检查更新,返回值有三种情形:
触发更新检查,更新`usePushy`中的`updateInfo`,返回值有三种情形:

1. `{expired: true}`:该应用原生包已过期(三种情况:1. 主动设置为过期状态,2. 主动删除,3. 从未上传),需要前往应用市场下载新的版本(在设置中填写 downloadUrl)。
1. `{expired: true}`:该应用原生包已过期(三种情况:1. 主动设置为过期状态,2. 主动删除,3. 从未上传),需要引导用户下载或跳转到应用市场(需要在网页管理端设置中填写`downloadUrl`)。

```js
{
Expand All @@ -196,7 +203,7 @@ interface PushyContext {

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

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

```js
{
Expand Down Expand Up @@ -237,7 +244,7 @@ interface PushyContext {

#### function markSuccess()

`isFirstTime``true`时,必须调用此函数作为更新成功的标记(否则下次启动会默认失败自动回滚)
手动调用此函数作为更新成功的标记(否则下次启动会默认失败自动回滚)。默认情况下不需调用此函数,除非设置`autoMarkSuccess``false`

---

Expand Down
24 changes: 6 additions & 18 deletions site/pages/docs/bestpractice.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,27 +85,15 @@ splits {
此时在客户端检查更新时,能获取到我们刚刚输入的元信息,但它并不具备任何功能,只是一个字符串而已。所以我们其实需要**预先**在更新流程中加入对应的处理逻辑:

```js
// 调用 checkUpdate 获取 info
if (info.expired) {
// 调用 checkUpdate 获取 updateInfo
if (updateInfo.expired) {
// ... 原生包版本过期,下载或跳转下载页面
} else if (info.upToDate) {
} else if (updateInfo.upToDate) {
// ... 没有更新,弹提示或忽略
} else {
// 有更新,一般来说我们在这里给用户弹窗提示,让用户选择是否更新
// 那么静默更新的本质其实就是不弹窗,直接执行,所以可以在这里加入额外的判断流程
Alert.alert(
"提示",
"检查到新的版本" + info.name + ",是否下载?\n" + info.description,
[
{
text: "",
onPress: () => {
this.doUpdate(info);
},
},
{ text: "" },
]
);
// ...
}
```

Expand All @@ -115,14 +103,14 @@ if (info.expired) {
let metaInfo = {};
try {
// 注意 JSON 输入有可能有错误,需要用 try 语句来避免应用被带崩
metaInfo = JSON.parse(info.metaInfo);
metaInfo = JSON.parse(updateInfo.metaInfo);
} catch (e) {
// 异常处理,忽略或上报?
}

if (metaInfo.silent) {
// 如果热更包携带有 silent 字段,不询问用户,直接执行更新
this.doUpdate(info);
switchVersion();
} else {
// 否则还是走之前的询问流程
// Alert.alert('提示', '检查到新的版本.......
Expand Down

0 comments on commit a294d6c

Please sign in to comment.