灌糖包子 c5ef726134
移除验证码解析功能,简化为纯短信转发
- 删除 VerificationCodeParser 及相关测试,短信捕获和推送不再解析验证码
- 飞书推送改为只发送短信原文,时间戳格式化为可读日期
- 移除主界面"只推送验证码"开关和"调试时上传完整短信正文"选项
- 移除"保存轮询间隔"按钮,开启轮询时自动保存间隔(未输入默认1秒)
- 按钮文字从"开始1秒轮询验证码"改为"开始短信轮询"
- 删除"打印最近30条短信"功能及相关 SmsInboxReader.logRecentMessages
- SmsInboxReader 用 RecentSmsResult 替换 RecentCodeResult
- FeishuWebhookConfigStore.Config 移除 filterVerificationCode/sendFullBodyDebug
- 修复代码缩进不一致问题
2026-05-18 22:38:06 +08:00

85 lines
4.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.

## 1. Spec And API Validation
- [x] 1.1 阅读现有 `SmsReceive` 实现,确认短信广播、收件箱兜底和诊断 UI 的当前状态
- [x] 1.2 查询 Android 15 前台服务、Doze/App Standby、`RECEIVE_SMS` hard restricted、小米后台自启动相关资料
- [x] 1.3 生成后台保活 OpenSpec proposal、design、tasks 和 capability specs
- [x] 1.4 用 `npx openspec validate add-xiaomi-background-keepalive` 校验规格结构
- [ ] 1.5 后续提交或 push 前检查 diff避免引入非预期 EOF newline 变化
## 2. Manifest And Permission Plan
- [x] 2.1 增加 `RECEIVE_BOOT_COMPLETED` 权限
- [x] 2.2 增加前台服务所需权限,按当前 targetSdk 兼容处理
- [ ] 2.3 如 targetSdk 升到 33+,补充 `POST_NOTIFICATIONS` 申请和诊断
- [x] 2.4 如使用直接请求电池优化白名单,增加 `REQUEST_IGNORE_BATTERY_OPTIMIZATIONS`
- [x] 2.5 声明 `BootReceiver`,覆盖 `BOOT_COMPLETED``LOCKED_BOOT_COMPLETED``MY_PACKAGE_REPLACED`
- [x] 2.6 声明 `SmsKeepAliveService`,避免声明 Android 15 从 boot 禁止启动的前台服务类型
## 3. Keepalive Service
- [x] 3.1 新增 `SmsKeepAliveService`
- [x] 3.2 服务启动后立即创建通知渠道和低打扰常驻通知
- [x] 3.3 服务在规定时间内调用 `startForeground`
- [x] 3.4 服务定期写入心跳状态,不执行耗时短信扫描
- [x] 3.5 服务停止或异常时写入明确诊断原因
- [x] 3.6 增加 UI 按钮开启/关闭常驻保活,并持久化用户选择
## 4. Boot And Package Restore
- [x] 4.1 新增 `BootReceiver`
- [x] 4.2 收到开机或包替换广播时记录事件和时间
- [x] 4.3 如果用户已开启保活,尝试启动 `SmsKeepAliveService`
- [x] 4.4 捕获前台服务启动限制异常并写入 `KeepAliveState`
- [x] 4.5 在 UI 展示最近开机事件和服务恢复结果
## 5. Xiaomi / HyperOS Setup Guide
- [x] 5.1 增加标准应用详情页入口
- [x] 5.2 增加 Android 电池优化设置入口
- [x] 5.3 增加可选的直接请求忽略电池优化入口
- [x] 5.4 增加小米后台自启动设置入口,显式组件失败时 fallback
- [x] 5.5 增加“我已开启自启动”人工确认状态
- [x] 5.6 增加“我已设置省电无限制”人工确认状态
- [x] 5.7 UI 明确说明人工确认项无法通过稳定公开 API 完全读取
## 6. SMS Receiver Delivery Diagnostics
- [x] 6.1 记录最近一次 `system_sms_broadcast` 到达时间
- [x] 6.2 记录最近一次 `sms_inbox_observer``sms_inbox_manual``sms_inbox_polling` 命中时间
- [x] 6.3 当收件箱兜底发现新短信但广播未到达时,展示“疑似短信广播未投递”
- [x] 6.4 在 UI 中列出 `onReceive` 不触发的排查清单
- [x] 6.5 增加 logcat 输出区分权限缺失、body 为空、parser 失败、广播未到达
## 7. Optional Native Experiment
- [x] 7.1 第一轮 Java 保活方案真机验证前,不实现 native fork/daemon
- [ ] 7.2 如用户仍要求尝试,新增 NDK heartbeat 实验开关
- [ ] 7.3 native heartbeat 只写本地诊断状态,不承担短信监听职责
- [ ] 7.4 文档记录 native 子进程被系统同组清理的限制
## 8. Tests
- [ ] 8.1 为 `KeepAliveStateStore` 增加状态读写测试
- [ ] 8.2 为 Boot action 处理逻辑增加单元测试
- [ ] 8.3 为设置 intent fallback 增加测试或可验证日志
- [x] 8.4 保持现有短信接收与结果展示测试通过
- [x] 8.5 不要求本轮编译;代码完成后再按用户要求通知
## 9. Xiaomi 12S / HyperOS 3 Device Validation
- [ ] 9.1 手动开启小米自启动
- [ ] 9.2 手动设置省电策略为无限制
- [ ] 9.3 开启常驻通知,后台 30 分钟后发送测试短信
- [ ] 9.4 锁屏 30 分钟后发送测试短信
- [ ] 9.5 重启手机,确认保活服务是否自动恢复
- [ ] 9.6 重启后未打开 app 直接发送第一条短信,记录广播是否到达
- [ ] 9.7 手动 force-stop 后发送短信,确认不承诺接收,并记录诊断表现
- [ ] 9.8 如 `onReceive` 不到但收件箱有短信,记录 HyperOS 设置、权限状态和 logcat
## 10. Delivery Criteria
- [x] 10.1 OpenSpec validate 通过
- [x] 10.2 相关上下文逻辑分析通过
- [x] 10.3 相关测试通过
- [x] 10.4 代码实现完成后通知用户,不强制编译