Files
吕新雨 049995692d init
2026-01-28 20:50:17 +08:00

130 lines
5.2 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.
# Client Bootstrap高层规范
## 1. 背景与目标
本需求用于初始化「正念 APP」客户端工程的高层规范确保项目具备一致的工程结构、环境区分、国际化、多端调试与打包流程并为后续推送、小组件、情绪卡片等一期功能落地提供清晰边界。
### 目标
- **工程可运行**:开发者可在本地启动 Expo 开发服务器并在模拟器/真机调试
- **环境可切换**:支持 dev/prod 两套环境变量与配置切换
- **多语言可扩展**:支持 CN/EN/ES/PT/TC 五种语言,并具备动态切换与回退策略
- **目录标准化**:采用标准 Expo + TypeScript 目录结构,便于持续扩展
- **打包可执行**:支持 EAS Build 的 iOS 打包流程dev/prod 基本约定)
### 非目标(本阶段不做)
- 不在本阶段实现完整业务 UI/交互细节(以工程骨架与规范为主)
- 不在本阶段实现后端接口与数据库设计(由 `server/` 侧需求承接)
- 不保证小组件在所有刷新频率下的严格准时(受 iOS 系统限制)
## 2. 范围与交付物
### 范围
- 客户端工程初始化与文档化(`client/`
- 推送/小组件/卡片滑动的高层能力约束与接口对齐点(不实现具体代码亦可)
- 国际化i18n规范与资源组织方式
### 交付物
- **`client/README.md`**:可运行、可联调、可打包、可扩展的客户端说明文档
- **客户端工程目录结构规范**`app/`(可选 expo-router+ `src/` 的职责划分
- **i18n 规范**:语言码、资源文件组织、回退策略、动态切换策略
## 3. 用户与核心使用场景
- **用户**:宝妈群体(情绪支持与正念练习)
- **开发者场景**
- 新成员可按文档快速启动项目并联调后端
- 能在 dev/prod 之间切换并进行 iOS 构建
- 能新增一条文案并同步到五种语言资源中
## 4. 功能需求(高层)
### 4.1 基础工程能力
- 支持 Expo 本地启动与 iOS/Android 运行入口
- 支持网络请求基座Axios 或 Fetch与 API Base URL 配置
- 支持状态管理基座Zustand
### 4.2 环境区分dev / prod
- 客户端使用 `.env.dev` / `.env.prod` 管理环境变量
- `.env` 不提交到 Git提供 `.env.example` 作为模板
- 推荐使用 `EXPO_PUBLIC_` 前缀的公开变量(如 `EXPO_PUBLIC_API_BASE_URL`
- dev/prod 的 bundle id 约定:
- dev`com.damer.mindfulness.dev`
- prod`com.damer.mindfulness`
### 4.3 多语言CN/EN/ES/PT/TC
- 支持语言码:
- CN`zh-CN`
- EN`en`
- ES`es`
- PT`pt`
- TC`zh-TW`
- 推荐方案:`i18next` + `react-i18next` + `expo-localization`
- 文案 key 需稳定(点分层),支持插值,避免字符串拼接
- **默认语言选择**:优先使用用户当前**设备语言**(在支持列表内时生效)
- **手动切换**:在“设置”中支持切换语言,切换后持久化(例如 AsyncStorage并在后续启动中优先生效
- **回退策略**:设备语言不在支持列表时,回退到 `zh-CN`(或团队指定的默认语言)
- 如后端需要多语言(如推送文案),语言码需与客户端一致,并在接口中明确 `lang`
### 4.4 推送(一期能力约束)
- 客户端需能:
- 申请通知权限
- 获取 Push Token
- 将 Token 上报后端(接口字段与鉴权方式由联调阶段确认)
- 后端需能:
- 保存 Token
- 按策略触发定时推送(固定时间/用户自定义时间)
- 支持后台配置推送内容并更新
### 4.5 iOS 小组件(一期能力约束)
- 展示:当前情绪文字 + 背景图/渐变
- 支持:小/中/大三种尺寸
- 数据源:本地缓存或后端拉取(需定义刷新/缓存策略)
- 刷新:可配置刷新频率,但需接受 iOS 系统限制导致的不确定性
### 4.6 情绪卡片滑动(一期能力约束)
- 展示情绪卡片列表
- 左右滑动切换下一张(类似 Tinder
- 收藏/分享作为后续迭代(不纳入本阶段验收)
## 5. 技术与工程规范
### 5.1 目录结构(标准建议)
- 推荐 `expo-router`:使用 `app/` 作为路由目录
- 业务代码统一放入 `src/`,并按功能域拆分 `features/`
- 资源放入 `assets/`
- 配置文件:`app.json``app.config.ts``eas.json``package.json`
### 5.2 依赖与工具(建议)
- Node.jsLTS
- 包管理器pnpm团队统一
- Expo推荐通过 `npx expo` 使用,避免全局版本漂移
- iOS 真机调试macOS + Xcode如需
## 6. 验收标准
- 文档层面:
- `client/README.md` 明确启动方式、环境变量、联调方式、EAS 构建方式、多语言规范、标准目录结构
- 工程层面(当客户端代码提交后):
- 可在本地 `pnpm install` 后启动并运行到 iOS/Android
- 可切换 dev/prod 环境变量并影响 API Base URL
- i18n 可在运行时切换到 `zh-CN/en/es/pt/zh-TW` 并生效
## 7. 风险与注意事项
- iOS 小组件刷新频率受系统限制:规范中应强调“尽力而为”的体验目标
- 真机联调 `localhost` 不可用:需使用局域网 IP 或内网穿透
- 推送与证书/配置相关:需在 EAS 配置与平台后台完成相应设置