fix:小组件- PUSH

This commit is contained in:
吕新雨
2026-02-03 17:43:58 +08:00
parent d742b398ef
commit c1c2c6197d
66 changed files with 4888 additions and 479 deletions

View File

@@ -28,6 +28,27 @@
- **阶段产物**
- `spec_kit/Client User Identity/spec.md`
## App Push
- **目标**:实现“每日提醒”推送闭环:首次进入 Onboarding 可选择每日推送次数05可跳过个人主页每日提醒弹窗可改次数/关闭;客户端使用首次生成 UUID`client_user_id`)与后端关联;后端按用户配置定时推送
- **关键选型**:客户端继续使用 `expo-notifications`;后端使用 Expo Push Service + 定时任务Celery/等价方案)按用户偏好发送
- **阶段产物**
- `spec_kit/App Push/spec.md`
- `spec_kit/App Push/plan.md`
- `spec_kit/App Push/tasks.md`
- **已完成编码(阶段性)**
- 客户端:新增 `client_user_id`UUID v4生成与持久化每日提醒次数范围修正为 **05**0 表示关闭)
- 客户端Onboarding 结束页(每日提醒)在用户选择次数 > 0 时**直接触发系统权限申请**;授权后获取 Expo Push Token 并调用后端 `register/preferences`(移除单独的 push 引导页)
- 客户端:个人主页“每日提醒”弹窗移除测试模式强制无权限逻辑,改为真实读取系统权限;并在开关/点击 OK 时同步后端偏好
- 客户端:新增推送接口封装 `client/src/services/pushApi.ts`token 获取、register/preferences/get、自动上报时区与 locale并携带用户画像供后端 Push 模板使用)
- 后端:新增 Push 数据模型 + Alembic 迁移(`push_tokens` / `push_preferences` / `push_send_log`
- 后端:新增 Push API`/v1/push/register``/v1/push/preferences``/v1/push/test`dev并新增基础限流
- 后端:实现 Celery 定时任务
- 每日生成计划(按用户时区在 9:0024:00 均匀分段随机抖动生成 05 个时间点)
- ETA 发送任务(幂等:同一用户同一天同一 slot 只发一次;用户中途关闭/降次数会跳过)
- 发送文案复用推荐模块 `scene="push"`(降风险)
- 后端:`pytest` 全量通过27 passed
## Project Bootstrap
- **目标**:完成项目仓库初始化与工程约定落地,明确 client/server 结构、dev/pro 环境隔离、MySQL/Redis 资源命名与访问边界
@@ -46,8 +67,8 @@
## Onboarding App Shell
- **目标**落地首次进入体验Onboarding 35 页可跳过 + Push 设置可跳过)与主应用壳(点赞/讨厌、收藏夹入口、通用设置入口)
- **核心范围**Onboarding 多页流程、Push 引导页、主界面反应操作Like/Dislike、收藏夹、设置页版本、iOS 小组件入口/说明)
- **目标**落地首次进入体验Onboarding 35 页可跳过 + 每日提醒可跳过/可关闭)与主应用壳(点赞/讨厌、收藏夹入口、通用设置入口)
- **核心范围**Onboarding 多页流程、主界面反应操作Like/Dislike、收藏夹、设置页版本、iOS 小组件入口/说明)
- **阶段产物**
- `spec_kit/Onboarding App Shell/spec.md`
- `spec_kit/Onboarding App Shell/plan.md`
@@ -66,6 +87,7 @@
- 修复 iOS 签名 Team 配置不一致:为主 AppDebug与 Widget ExtensionDebug/Release显式补齐 `DEVELOPMENT_TEAM=WS92GPX9H2`,避免打包/上传过程中回退到默认 Team 导致显示 “Other Team”
- iOS 构建号已提升到 `2`,并将 `client/ios/client/Info.plist` 改为自动跟随 `MARKETING_VERSION` / `CURRENT_PROJECT_VERSION`
- 推送 entitlements 的 `aps-environment` 已切到 `production`(用于 TestFlight/线上包)
- 清理未接入编译的 WidgetKit 骨架残留:移除磁盘上的 `client/ios/MindfulnessWidget/` 文件,并从 `client/ios/client.xcodeproj/project.pbxproj` 删除对应工程引用(避免 Xcode 显示幽灵文件)
## Splash Consent
@@ -76,6 +98,38 @@
- `spec_kit/Splash Consent/plan.md`
- `spec_kit/Splash Consent/tasks.md`
## Policy Links
- **目标**:在客户端首次进入同意页底部补充「隐私协议/用户使用协议」入口,并将协议链接改为**由后端托管与按设备语言下发**(默认回退 EN
- **核心范围**:后端提供协议链接下发接口(可配置、可多语言);客户端按设备语言请求并展示链接,失败不阻塞“同意并继续”
- **阶段产物**
- `spec_kit/Policy Links/spec.md`
- `spec_kit/Policy Links/plan.md`
- `spec_kit/Policy Links/tasks.md`
- **已完成编码(任务清单已执行完毕)**
- 后端新增 `GET /v1/legal/links`(按 `Accept-Language` 分发,默认回退 EN返回 `resolvedLang`
- 后端配置:`LEGAL_*` 环境变量(`server/env.example` 已补齐示例;不配置时走内置协议页兜底)
- 后端新增内置协议内容页:
- `GET /v1/legal/privacy`
- `GET /v1/legal/terms`
- 客户端新增协议接口封装 `client/src/services/legalApi.ts`
- 客户端工程化:新增统一 HTTP 封装 `client/src/utils/http.ts`baseURL/超时/JSON/统一错误),并将 `legalApi.ts` / `recoApi.ts` 接入
- 客户端接入两处入口:`app/(splash)/splash.tsx``components/home/ProfileModal.tsx`
- **变更文件清单**
- `server/app/api/v1/legal.py`
- `server/app/core/config.py`
- `server/app/legal_docs.py`
- `server/app/main.py`
- `server/env.example`
- `server/tests/test_legal_links_unittest.py`
- `client/src/services/legalApi.ts`
- `client/src/services/__tests__/legalApi.test.ts`
- `client/app/(splash)/splash.tsx`
- `client/components/home/ProfileModal.tsx`
- `spec_kit/Policy Links/spec.md`
- `spec_kit/Policy Links/plan.md`
- `spec_kit/Policy Links/tasks.md`
## Card UI
- **目标**:优化卡片页 UI 与交互,支持右上角主题切换与个人主页弹窗,并将喜欢/讨厌改为 icon + 动效