新增文档说明

This commit is contained in:
吕新雨
2026-01-29 23:31:12 +08:00
parent 0dd84b1873
commit d08deef478
22 changed files with 2079 additions and 2 deletions

View File

@@ -0,0 +1,112 @@
# Splash Consent技术计划
## 1. 计划目标
实现客户端开屏页Splash/Welcome与首次协议同意逻辑
- 使用 `client/assets/images/index/` 的图片作为主视觉(例如 `index_flowers.png`
- 底部渐变按钮颜色:`#F69F7B → #F99CC0`
- 按钮下方提供「隐私协议」「用户使用协议」外部链接入口(先用占位链接)
- **仅首次出现按钮**:当 `consent.accepted=true` 后不再展示同意按钮与协议入口
- 同意后进入现有启动分发:`app/index.tsx`(继续走 Onboarding/App Shell
## 2. 默认技术决策
- **路由**:沿用 `expo-router`
- **持久化**:沿用 `AsyncStorage`
- **协议打开方式**:外部链接(`expo-web-browser``Linking.openURL`
- **渐变实现**:使用 `expo-linear-gradient`Expo 官方)
## 3. 路由与流程设计
### 3.1 新增路由
- `app/(splash)/splash.tsx`:开屏页(图片 + 首次同意按钮/协议入口)
- `app/(splash)/_layout.tsx`:可选(一般无需 header
### 3.2 启动分发逻辑(与现有流程集成)
当前已存在启动分发 `app/index.tsx`(根据 `onboarding.completed` 跳转)。
本需求将启动分发扩展为两段判断:
1.`consent.accepted !== true`:跳转到 `/(splash)/splash`
2.`consent.accepted === true`:沿用原逻辑(进入 Onboarding 或 `/(app)/home`
> 注意:你确认的是“隐藏按钮而不是隐藏页面”。因此当 `consent.accepted=true` 时,开屏页不需要停留;可直接跳过该页进入原启动分发。
## 4. 数据与持久化
### 4.1 Key
- `consent.accepted`: boolean
### 4.2 存储封装
在现有 `src/storage/appStorage.ts` 中补充:
- `getConsentAccepted(): Promise<boolean>`
- `setConsentAccepted(accepted: boolean): Promise<void>`
并确保所有 UI 不直接硬编码 key。
## 5. UI 细节与交互
### 5.1 开屏布局(建议)
- 主视觉图片:
- 使用 `index_flowers.png`
- 适配:`resizeMode="contain"` 或按实际视觉调整(不裁切关键内容)
- 底部区域(贴近安全区):
- 渐变按钮(圆角、阴影/投影轻微)
- 协议入口(两段文字按钮,左右排列或一行内间隔)
### 5.2 渐变按钮(仅首次出现)
- 展示条件:`consent.accepted !== true`
- 点击行为:
- 写入 `consent.accepted=true`
- 跳转到 `/`(触发 `app/index.tsx` 继续分发)
### 5.3 协议入口(外部链接,先占位)
- 「隐私协议」:`https://example.com/privacy`
- 「用户使用协议」:`https://example.com/terms`
打开方式:
- 优先:`expo-web-browser` 打开外部链接
- 兜底:`Linking.openURL`
## 6. i18n 文案
新增 key至少 `zh-CN/en`,其余语言可逐步补齐):
- `consent.title`(可选)
- `consent.agree`(按钮文案:同意并继续)
- `consent.privacy`(隐私协议)
- `consent.terms`(用户使用协议)
## 7. 实施步骤
1. 新增 `consent.accepted` 的存储读写方法
2. 新增 `/(splash)/splash` 页面(图片 + 渐变按钮 + 协议入口)
3. 修改 `app/index.tsx`:在 onboarding 分发前插入 consent gate
4. 接入 `expo-linear-gradient` 并完成按钮 UI
5. 接入外部链接打开(先占位 URL
6. 补齐 i18n key至少 zh-CN/en
7. 自测:
- 首次启动:显示按钮与入口;同意后进入 Onboarding/App
- 再次启动:不再出现同意按钮,直接进入后续流程
## 8. 验收标准
- 首次启动:
- 展示开屏图片
- 渐变按钮颜色正确(`#F69F7B → #F99CC0`
- 协议入口可点击并打开外部链接
- 点击同意后进入后续流程
- 非首次启动:
- 不再出现同意按钮与协议入口
- 直接进入后续流程Onboarding/App Shell