v1.5.60 - 2026-08-23
修复:推送历史偶发一直显示「推送中」 + 精确闹钟权限兼容
🐛 推送历史状态修复:
- 根因:送达结果链路依赖 MainActivity 存活(动态广播接收器 + 其持有的 MethodChannel)。滑掉最近任务或系统回收 Activity 后,推送完成的结果广播无人接收,记录永远停在「发送中」。
- 修复:送达结果持久化队列(DeliveryResultStore)+ 启动 / 回前台时补偿拉取(
drainDeliveryResults)。广播实时链路不变,Activity 销毁期间的结果由队列兜底,下次加载记录或回前台时一次性补齐,覆盖 Webhook / 邮件 / 短信 / 电话全部通道。
🐛 精确闹钟权限 Intent 兼容:
- Android 12~13 的
ACTION_REQUEST_SCHEDULE_EXACT_ALARM去除可选的 data 参数(官方标记 Optional)。部分 ROM(尤其国产)Settings 组件不匹配带 data 的 Intent,导致授权弹窗无法打开;不带 data 时系统默认取调用者包名,并保留 Activity 未找到时的应用详情页兜底。
精确闹钟开关 + 国产 ROM 保活引导 + 邮件通道增强 + 安全与健壮性加固
⏰ 精确闹钟开关(B1):
- 新增可选「精确闹钟」开关(默认关闭,保持权限最小化):开启后延迟/定时推送在深度 Doze 下也可准点触发(
setExactAndAllowWhileIdle)。 - Android 12~13 开启时自动弹系统授权对话框;Android 14+ 跳应用详情页引导手动授权。
- 未授权时自动降级为非精确闹钟,功能不中断,不阻塞使用。
🔋 国产 ROM 保活引导卡片(B2):
- 权限设置页新增保活引导:省电无限制 / 自启动 / 任务锁定 / 通知使用权四步卡片,识别 MIUI/HyperOS/ColorOS/EMUI 等 ROM 一键跳转对应厂商省电设置页。
📱 锁屏验证码兜底(B3):
- 锁屏脱敏正文(验证码显示
******)检测后,转发文案替换为「验证码内容被锁屏隐藏,请解锁后查看」,不再向各通道发送无意义星号。
📧 邮件通道增强(D1):
- 临时性失败(网络超时 / 连接失败 / SSL 握手 / 421 临时故障)自动重试 1 次(2 秒退避)。
- 错误分类细化:认证失败 / 地址错误 / 被拒收等配置类问题直接提示,失败原因经历史记录内联显示(与测试邮件共用同一分类逻辑)。
⬇️ 检查更新 403 优化(A1):
- 更新检查被 CDN(Cloudflare Bot Fight Mode)拦截时自动指数退避重试 1 次;仍失败则提示「被 CDN 拦截,请稍后重试」而非笼统网络错误。
🔒 安全与健壮性加固:
- 正则规则保护(E1):规则/关键词正则超过 200 字符直接拒绝,防止灾难性回溯阻塞监听服务。
- 竞态与异常加固(E2):推送计数跨日重置同步化、通道配置 volatile 发布(copy-on-write)、协程未捕获异常兜底记录日志。
- 证书固定框架就绪(C1):证书 pin 支持构建时注入(
--dart-define=CERT_PINS),默认关闭,开启后 Release 版强制校验服务器证书。 - 原生配置加密桥接(C2):Webhook secret 等原生端明文存储迁移至 EncryptedSharedPreferences,与 Flutter 端加密存储同源。
🧪 测试补充(E3):
- 新增跨零点时间区间命中/未命中、超长正则拒绝、边界长度正则可用等 4 个用例,测试总数 123。
Full Changelog: 1.5.59...1.5.60