wz-uniapp/docs/AppConfigVersionPlan.md

96 lines
3.6 KiB
Markdown

# 小程序接口与 WebView 版本一致性方案
## 目标
- 小程序获取接口地址与 WebView 地址。
- 判断版本一致性与可用性。
- 不可用时提示用户退出小程序重新打开。
## 总体思路
采用“配置中心 + 启动校验 + 缓存兜底 + 失效提示”的方案:
1. 小程序启动时请求配置中心接口获取最新配置。
2. 校验小程序版本、API版本、WebView版本一致性。
3. 校验失败则提示退出重启;通过则写入缓存并使用配置。
4. 配置接口不可用时使用缓存,缓存失效则提示退出重启。
## 配置中心接口
- 方法: `GET`
- 路径: `/api/open/app/config`
### 返回示例
```json
{
"app": {
"minVersion": "1.2.0",
"latestVersion": "1.3.5",
"forceUpdate": true
},
"api": {
"baseUrl": "https://api.xxx.com",
"version": "2026-03-16",
"minClientVersion": "1.2.0"
},
"webview": {
"baseUrl": "https://m.xxx.com",
"version": "2026-03-16",
"minClientVersion": "1.2.0"
},
"ttlSeconds": 3600,
"disabled": false,
"disableReason": ""
}
```
### 字段说明
- `app.minVersion`: 最低可用小程序版本。
- `app.latestVersion`: 最新版本号。
- `app.forceUpdate`: 是否强制更新。
- `api.baseUrl`: API 入口地址。
- `api.version`: API 版本号(用于一致性校验)。
- `api.minClientVersion`: API 允许的最小客户端版本。
- `webview.baseUrl`: WebView 入口地址。
- `webview.version`: WebView 版本号(用于一致性校验)。
- `webview.minClientVersion`: WebView 允许的最小客户端版本。
- `ttlSeconds`: 配置缓存有效期(秒)。
- `disabled`: 服务下线开关。
- `disableReason`: 下线原因。
## 小程序启动校验流程
1. 小程序 `App.onLaunch` 请求 `/api/open/app/config`
2. 校验顺序:
- `disabled == true` → 提示“服务暂不可用,请退出小程序重新打开”。
- `当前版本 < app.minVersion` → 提示强更并阻断。
- `api.version != webview.version` → 提示“版本不一致,请退出小程序重新打开”。
- `当前版本 < api.minClientVersion``当前版本 < webview.minClientVersion` → 提示强更。
3. 校验通过:
- 缓存配置(本地 `storage`)。
- 全局设置 API baseUrl 与 WebView baseUrl。
## 缓存与兜底策略
- 配置接口失败:
- 如果本地缓存存在且未过期 → 使用缓存。
- 若缓存过期或不存在 → 提示“配置获取失败,请退出小程序重新打开”。
## 提示文案建议
- 版本不一致:
- “当前版本不一致,请退出小程序并重新打开以获取最新配置。”
- 服务不可用:
- “服务暂不可用,请退出小程序重新打开。”
- 配置获取失败:
- “配置获取失败,请退出小程序重新打开。”
## WebView 入口处理
- WebView URL 必须由配置中心下发,避免在客户端写死。
- 进入 WebView 前再次校验缓存是否过期;过期则重新拉取。
## 前端需要完成的部分
1.`App.onLaunch` 拉取 `/api/open/app/config`,并写入本地缓存。
2. 实现版本校验逻辑(`app.minVersion`、`api.version`、`webview.version`、`minClientVersion`)。
3. 校验失败时弹窗提示,并引导退出小程序重新打开。
4. 缓存过期或接口失败时,优先使用缓存;无缓存则提示退出。
5. WebView 入口统一从配置下发的 `webview.baseUrl` 拼接跳转。
6. 请求 API 时统一使用配置下发的 `api.baseUrl`
## 可选扩展
- 灰度策略:按用户或设备下发不同配置。
- 公告字段:返回 `notice` 用于维护提示。