Unity C#开发安卓端每日定时通知无法正常触发问题
每日固定时间推送通知失效修复方案
核心问题定位
你使用的示例代码存在逻辑缺陷:
- 代码中
FireTime直接构造了当日的10:30作为首次触发时间,如果当前设备时间已经晚于当日10:30,这个触发时间属于过去时间点,系统调度器会直接丢弃该通知任务,全程不会抛出任何异常,这是通知无法送达的最常见原因。
可直接复用的正确实现代码
需要先对首次触发时间做合法性校验,避免触发时间落在过去,同时支持替换为用户自主选择的任意时间点:
// 替换hour、minute参数为用户选择的目标时、分即可 int userSelectHour = 10; int userSelectMinute = 30; // 构造当日的目标触发时间,显式指定为本地时区时间,避免时区偏移 DateTime firstTriggerTime = new DateTime( year: DateTime.Now.Year, month: DateTime.Now.Month, day: DateTime.Now.Day, hour: userSelectHour, minute: userSelectMinute, second: 0, kind: DateTimeKind.Local ); // 若当前时间已过当日目标时间,首次触发顺延至次日 if (DateTime.Now > firstTriggerTime) { firstTriggerTime = firstTriggerTime.AddDays(1); } // 通知调度参数配置 FireTime = firstTriggerTime, RepeatInterval = TimeSpan.FromDays(1), // 间隔24小时重复,实现每日触发
其他必查的失效场景
如果按上述代码修改后仍无法收到通知,逐一排查以下配置问题:
- Android 13(API 33)及以上版本必须动态申请
POST_NOTIFICATIONS运行时权限,未获得该权限时所有通知会被系统静默拦截,无任何报错提示 - Android 8.0(API 26)及以上版本必须提前创建对应ID的通知渠道,渠道重要等级不能设置为
IMPORTANCE_NONE,否则通知无法弹出 - 设备重启、应用被强制停止后,系统会清空所有已调度的定时通知,需要监听
BOOT_COMPLETED系统广播,在开机完成后重新注册所有通知任务 - 小米、华为、OPPO、vivo等国产定制ROM默认会限制应用后台运行、自启动权限,需要引导用户关闭应用的电池优化、加入后台运行白名单,否则定时任务会被系统强制清理无法触发
内容的提问来源于stack exchange,提问作者Giorgos V
相关产品推荐
相关产品推荐

