# Splash Consent（高层规范）

## 1. 背景与目标

客户端需要一个开屏页（Splash/Welcome），用于展示品牌视觉并在**首次加载**时让用户同意隐私协议与用户使用协议。用户同意后进入后续流程（Onboarding/App）。

### 目标

- **视觉开屏**：使用 `client/assets/images/index/` 下的图片资源作为主视觉
- **首次同意**：底部渐变按钮仅在首次加载时出现，用于“同意并继续”
- **协议入口**：按钮下方提供「隐私协议」「用户使用协议」入口，用户可点击查看
- **状态持久化**：同意后不再显示该按钮（后续启动直接进入后续流程）

### 非目标（本阶段不做）

- 不实现复杂的协议版本管理（如协议更新后重新弹出），后续可扩展
- 不实现后端拉取协议内容（可先使用本地静态页面或外链）

## 2. 范围与交付物

### 范围

- 新增开屏页 UI 与路由接入
- 新增“首次同意”状态的本地持久化
- 协议入口（跳转到 WebView/外部浏览器/内置页面，方案在实现阶段确定）

### 交付物

- 开屏页（含图片、按钮、协议入口）
- 本地持久化 key 约定与读写逻辑
- README/文档更新（可选）

## 3. 视觉与交互需求

### 3.1 主视觉

- 使用 `client/assets/images/index/` 下的图片资源（例如 `index_flowers.png`）
- 布局建议：
  - 图片居中或铺满上半部分（按实际设计微调）
  - 适配不同屏幕尺寸，确保不变形/不裁切关键内容

### 3.2 底部渐变按钮（仅首次出现）

- **出现条件**：仅在首次加载且未同意协议时显示
- **按钮文案**：建议“同意并继续”（文案可后续调整，需支持 i18n）
- **按钮渐变色**：从 `#F69F7B` 到 `#F99CC0`
- **点击行为**：
  - 写入本地状态：用户已同意
  - 跳转到后续流程入口（例如 Onboarding 或 Home 的启动分发）

### 3.3 协议入口

- 位于按钮下方，展示：
  - **隐私协议**
  - **用户使用协议**
- 点击行为：打开对应协议内容
  - 支持外链或内置页面（实现阶段确认）

## 4. 首次加载判定与持久化

### 4.1 判定规则

- **首次加载定义**：App 首次启动且用户未完成协议同意

### 4.2 存储 Key（建议）

- `consent.accepted`: boolean

> 说明：后续如需协议版本化，可扩展为 `consent.versionAccepted = <version>`。

## 5. 路由与流程（与现有客户端集成）

### 5.1 流程顺序（建议）

1. App 启动
2. 若 `consent.accepted !== true`：进入开屏页（展示按钮与协议入口）
3. 用户点击“同意并继续”后：
   - 写入 `consent.accepted=true`
   - 进入后续流程（例如 Onboarding/App Shell 的启动分发）

### 5.2 与现有功能的关系

- 开屏页位于 Onboarding 之前（更符合“先同意协议再使用”的要求）
- 同意后按既有规则继续：
  - 已完成 onboarding：进入 Home
  - 未完成 onboarding：进入 Onboarding

## 6. 验收标准

- 首次启动：
  - 出现开屏页，展示图片
  - 底部渐变按钮可见，颜色正确（`#F69F7B` → `#F99CC0`）
  - “隐私协议/用户使用协议”可点击打开
  - 点击“同意并继续”后进入后续流程
- 非首次启动：
  - 不再出现“同意按钮”（且开屏页按产品要求可直接跳过或不再展示）
  - 直接进入后续流程

## 7. 风险与注意事项

- 协议内容来源若为外链，需要保证链接长期可用；若为本地页面，需要考虑后续更新机制
- iOS 不同机型安全区（底部 Home Indicator）需保证按钮与协议入口不被遮挡

