Files
2026-02-03 17:43:58 +08:00

128 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Policy Links高层规范
## 1. 背景与目标
当前客户端首次进入的同意页Splash Consent需要在底部提供「隐私协议」「用户使用协议」的查看入口。为避免协议链接写死在客户端、并支持多语言分发本需求将**协议链接放到后端统一管理与下发**,客户端按设备语言展示对应链接。
### 目标
- **首进页补充协议链接**:在客户端首次进入的同意页底部展示「隐私协议」「用户使用协议」链接入口
- **后端托管与可配置**:协议链接由后端配置与下发,支持后续更新而无需发版
- **按设备语言下发**:后端根据客户端设备语言返回对应语言的链接
- **默认 EN**:当语言缺失/不支持/无法识别时回退为英文EN链接
### 非目标(本阶段不做)
- 不做复杂的协议版本强制重同意机制(例如协议更新后要求重新同意)
- 不规定协议内容必须以何种格式Markdown/HTML/PDF存储本需求仅要求“链接由后端提供并可访问”
## 2. 需求范围与交付物
### 范围
- 客户端:
- 首次进入同意页底部展示 2 个协议链接入口,并在点击时打开对应链接
- **个人主页弹窗ProfileModal**中「隐私协议」「用户使用协议」入口也必须使用同一套后端下发链接(不再写死/不再 TODO
- 后端:提供可被客户端请求的协议链接下发能力,并支持按语言返回不同链接
### 交付物
- 后端:新增/扩展一个“协议链接配置与下发”的接口(或纳入现有配置接口),并可按语言返回
- 客户端:同意页 UI 补充协议链接入口,且链接来源改为后端下发(含兜底策略)
- 文档:本 spec
## 3. 用户体验与交互(高层)
### 3.1 展示位置
- 位置:客户端**首次进入同意页**底部,「同意并继续」按钮下方(或同等位置)展示:
- **隐私协议**
- **用户使用协议**
### 3.2 点击行为
- 点击后打开对应链接内容:
- 推荐使用 App 内 WebView不离开 App也允许外部浏览器打开实现阶段在客户端方案中确定
- 若链接无法获取或打开失败:
- 仍允许用户继续使用“同意并继续”(不阻塞主流程)
- 入口可隐藏或展示为不可点击状态(实现阶段确定,但需保持体验一致且不崩溃)
## 4. 语言策略
### 4.1 语言来源
- 客户端以**设备语言/应用当前语言**作为请求依据(优先级由客户端既有 i18n 策略决定)
- 客户端请求应携带语言信息(例如 `Accept-Language` 头或显式参数)
### 4.2 默认与回退
- 默认语言:**EN**
- 回退策略(必须满足):
- 语言缺失/空值 → EN
- 语言不支持 → EN
- 后端配置缺失对应语言 → EN
### 4.3 支持语言(建议)
当前多语言仅支持 **EN / TC**,建议最少覆盖:
- `en`
- `tc`
> 说明:当前协议文档可能包含英文与繁体版本;当 tc 版本缺失时,系统会回退到 EN。
## 5. 后端职责(高层)
### 5.1 配置管理
- 后端存储并维护协议链接配置,至少包含:
- `privacy_policy_url`
- `terms_of_use_url`
- 配置需支持按语言维度区分(例如每个语言各一套 URL
- **兜底要求**:当外部托管链接未配置或不可用时,后端应提供可访问的内置协议页面(保证客户端点击“必有内容”)
### 5.2 下发接口(建议形态)
- 提供一个可被客户端调用的接口,用于获取协议链接(示例,仅表达形态,不强制路径):
- `GET /v1/legal/links`
- 输入(建议):
- 语言:通过 `Accept-Language``lang` 参数(例如 `en`/`tc`
- 可选平台、App 版本(用于灰度/差异化配置)
- 输出(建议):
- `privacyPolicyUrl: string`
- `termsOfUseUrl: string`
- `resolvedLang: string`(后端最终命中的语言,便于排查)
### 5.3 可用性与安全
- 链接必须可被公网访问(或在 App 可访问的网络环境可达)
- 推荐使用 HTTPS
- 若后端短时不可用,不应导致客户端首进流程崩溃
## 6. 客户端职责(高层)
- 在首次进入同意页渲染时,向后端请求协议链接
- 根据返回结果渲染「隐私协议」「用户使用协议」入口
- 若请求失败或返回缺失:
- 按本 spec 的默认回退策略处理(最终保证 EN
- 不阻塞“同意并继续”主流程
- (建议)对获取到的链接做轻量校验(非空字符串、看起来是 URL避免渲染异常
## 7. 验收标准
- **首进展示**:首次进入同意页时,底部出现「隐私协议」「用户使用协议」入口
- **语言分发**
- 设备语言为 EN 时,打开英文链接
- 设备语言为已支持的其他语言(如 `zh-CN`/`zh-TW`)时,打开对应语言链接
- 设备语言为不支持语言时,默认回退打开 EN 链接
- **稳定性**:后端不可达/返回异常时:
- App 不崩溃
- “同意并继续”仍可正常进入后续流程
## 8. 风险与注意事项
- **法务一致性**:各语言协议内容差异需要法务确认;若部分语言缺失,需明确 `zh-CN` 的回退策略(到 EN 还是 `zh-TW`
- **链接长期可用**:后端配置的 URL 需保证稳定与可访问性(避免过期链接导致合规风险)
- **缓存与更新**:若客户端做本地缓存,需要确保更新后能及时刷新(本期不强制,后续可扩展)