diff --git a/site/pages/docs/api.md b/site/pages/docs/api.md index 631a9aa..b0a28ee 100644 --- a/site/pages/docs/api.md +++ b/site/pages/docs/api.md @@ -102,6 +102,7 @@ const { dismissError, downloadUpdate, downloadAndInstallApk, + getCurrentVersionInfo, currentHash, packageVersion, client, @@ -129,7 +130,13 @@ interface PushyContext { downloadUpdate: () => Promise; // 下载并安装apk downloadAndInstallApk: (url: string) => Promise; - // 当前需要热更的版本hash + // 获取当前已热更版本的信息 + getCurrentVersionInfo: () => Promise<{ + name?: string; + description?: string; + metaInfo?: string; + }>; + // 当前的版本hash currentHash: string; // 当前的原生版本号 packageVersion: string; @@ -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 { @@ -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 { @@ -237,7 +244,7 @@ interface PushyContext { #### function markSuccess() -在`isFirstTime`为`true`时,必须调用此函数作为更新成功的标记(否则下次启动会默认失败自动回滚)。 +手动调用此函数作为更新成功的标记(否则下次启动会默认失败自动回滚)。默认情况下不需调用此函数,除非设置`autoMarkSuccess`为`false`。 --- diff --git a/site/pages/docs/bestpractice.md b/site/pages/docs/bestpractice.md index a1368b4..e1306a1 100644 --- a/site/pages/docs/bestpractice.md +++ b/site/pages/docs/bestpractice.md @@ -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: "否" }, - ] - ); + // ... } ``` @@ -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('提示', '检查到新的版本.......