Files
vscode-workbench/PLANNING/tasks/E-06-PWA与推送.md
T

50 lines
2.2 KiB
Markdown
Raw 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.
# E-06 · PWA + 推送提醒
| 字段 | 值 |
|---|---|
| 项目 | EnglishDrill · `Desktop/english-drill`(frontend + backend 定时任务) |
| 优先级 | P1 · M3 |
| 建议模型 | deepseek-v4.1-flash(主)/ gemini-3.8-flash(PWA 视觉验收) |
| 依赖 | 无 |
| 预估 | 2.5 天 |
## 一、背景(为什么做)
增长报告 P1 双项(`docs/AGI增长点分析-2026-09-11.md` #7 + #8):
- `UserProfile.notify_email` 字段存在但**从未被读取**(死字段)——提醒通道是空的;
- 让网站装到主屏(PWA)打开率显著高于"再开浏览器输网址";两者共用 Service Worker 基建,**一起做成本最低**。
- 提醒钩子:连续天数将断 —— "你的 7 天连续记录今天就要断了"比"快回来学习"有效 10 倍。
## 二、目标(交付物)
**A. PWA 基建**
1. `manifest.json`(名称/图标/主题色/display: standalone)+ Service Worker 注册
2. 离线能力:预缓存题库 JSON + 首页壳 → 无网络可刷已缓存题,联网后同步
3. 安装引导(可选提示条)
**B. 推送提醒(Web Push)**
4. VAPID 密钥对生成脚本 + 订阅管理接口(`POST/DELETE /api/accounts/push-subscription`)
5. 订阅存储(新表或扩展 profile:endpoint/keys/created_at)
6. 定时任务:每日扫"今天未学 + 连续天数≥3 将断"用户 → 发提醒(**每用户每天最多 1 条**,硬上限)
7. 关闭开关(尊重用户设置,一键退订真生效)
## 三、验收标准
- [ ] PWA 可安装(Lighthouse PWA 项通过或手动安装验证)
- [ ] 离线打开可答已缓存题;联网后记录不丢
- [ ] 推送订阅成功 → 测试推送可达(浏览器实测)
- [ ] 提醒任务:构造"将断签"用户 → 收到且**当天仅 1 条**
- [ ] 退订后不再收到
- [ ] 不滥用验证:普通用户连续多日仍只发 1 条/天
- [ ] 既有 E2E 全绿(SW 不干扰既有测试)
## 四、边界(不许做)
- 不做原生 App 推送(PWA 路线,成本优先)
- 不发营销内容(只发学习状态提醒)
- 不改动现有登录/学习主流程(SW 只做缓存层)
## 五、交接
写 `PROGRESS_E-06.md`(含 PWA 安装验证、推送实测记录、频率限制用例)。