本次修复:通知到时间不响
排查方式(无真机也能验证)
在浏览器注入 Capacitor 插件 mock,完整跑通 Android 调度分支(真机实际执行的那条路径),断言渠道创建 / 调度条数 / exact / allowWhileIdle / extra.kind。
结论:v3.17.43 的调度逻辑本身是正确的(0 错误、3 个渠道、56 条通知、exact:true)。
发现并修复的真实缺陷
通知 ID 重复:旧算法 = 秒级基准 + 自增计数 + 随机数(0~999),计数与随机数会互相抵消。
- 实测批量调度 56 条时出现重复 ID
- 重复 ID 会让后一条覆盖前一条 → 部分提醒静默不响
- 已改为「秒级基准 + 自增序号」,复测 56 条 ID 全部唯一
自检升级(重点)
真机看不到 console,所以「设置 → 🔍 诊断通知问题」现在直接给出完整证据,一次复制即可定位:
===== 上班日历 · 通知自检 =====
版本: 3.17.44 (versionCode 81)
环境: Android (Capacitor)
精确闹钟模式(本会话): ✅ 精确 exact / ⚠️ 非精确 inexact
提醒数据: 4 条(启用 4 条)
✅ LocalNotifications 插件已加载
✅ 通知权限: granted
❌ 精确闹钟权限: denied → 系统设置→应用→上班日历→闹钟和提醒,开启后重启 App
渠道 clockin-reminders: importance=5 sound=default
📋 待发送通知: 56 条(clockin:56)
最近调度[clock-in]: 2026/9/14 07:48 生成56 调度56 丢弃0 剩余配额397
怎么读:
待发送通知: 0 条→ 系统里没排上闹钟(打开 App 保持前台 10 秒会自动重排 14 天)精确闹钟权限: denied→ 只能走 inexact,Doze 下会「到点不响」→ 按提示开启后重启 App通知权限: denied→ 系统设置里开启渠道 importance<5 或 sound=null→ 通知渠道被系统/用户降级,需在系统设置里改回
若仍不响,问题在设备侧
请把上面的自检报告发来。最常见的三项:
- 系统设置 → 应用 → 上班日历 → 通知:允许通知
- 系统设置 → 应用 → 上班日历 → 闹钟和提醒:开启(精确闹钟)
- 系统设置 → 应用 → 上班日历 → 电池:改为「不受限制」+ 允许「自启动」(国产 ROM 必须)
提示:升级后旧版本的崩溃记录仍会弹一次(存在手机 crashlogs 目录里),点「清除并关闭」即可。