如何让Android/iOS应用完全关闭后仍运行定时推送方法?
实现跨平台(Android/iOS)后台定时推送通知方案
Android 平台方案
当应用被完全关闭后,Android 可依赖系统级调度组件触发通知,核心方案有两种:
AlarmManager + 广播接收器
这是最直接的定时触发方式,即便应用进程被杀死,AlarmManager仍能在指定时间触发广播。你需要:- 申请对应权限:Android 12+ 需
SCHEDULE_EXACT_ALARM权限,低版本需SET_ALARM权限; - 自定义继承
BroadcastReceiver的类,在onReceive方法中构建并发送通知; - 用
setExact或setExactAndAllowWhileIdle方法设置精确闹钟,关联你的广播接收器。
示例代码片段:
// 设置精确闹钟 val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(this, NotificationReceiver::class.java) val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE) alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent)- 申请对应权限:Android 12+ 需
WorkManager
适合兼容多 Android 版本、规避后台限制的场景。WorkManager 会自动处理系统电池优化和进程回收,即便应用关闭,系统也会在合适时机调度任务:- 自定义继承
Worker的类,在doWork方法中发送通知; - 用
OneTimeWorkRequest.Builder创建单次定时任务,通过setInitialDelay设置延迟时间; - 将任务提交给 WorkManager。
这种方案无需担心系统后台优化导致任务失效,兼容性更强。
- 自定义继承
iOS 平台方案
iOS 对后台进程管控严格,应用完全关闭后无法运行自定义代码,只能依赖系统级本地通知机制:
- UNUserNotificationCenter 本地通知
直接通过系统通知框架创建定时推送请求,即便应用被完全关闭,系统会在指定时间自动触发通知:- 向用户申请通知权限(如
UNAuthorizationOptions.alert); - 创建
UNMutableNotificationContent设置通知标题、内容等; - 用
UNTimeIntervalNotificationTrigger(延迟触发)或UNCalendarNotificationTrigger(指定时间触发)设置触发条件; - 通过
UNUserNotificationCenter.current().add(request)添加通知请求。
示例代码片段:
注意:若需动态调整定时逻辑,必须在应用活跃时提前创建或更新通知请求;若要更灵活的触发(如动态计算时间),可结合远程推送(APNs),但需要后端服务器配合发送推送指令。let content = UNMutableNotificationContent() content.title = "定时通知" content.body = "到达指定时间了" let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3600, repeats: false) let request = UNNotificationRequest(identifier: "timer_notification", content: content, trigger: trigger) UNUserNotificationCenter.current().add(request) - 向用户申请通知权限(如
跨平台统一实现
如果你使用 Flutter、React Native 等跨平台框架,可借助成熟插件简化开发:
- Flutter:使用
flutter_local_notifications,封装了 Android 和 iOS 的原生通知 API,支持设置本地定时通知; - React Native:使用
react-native-push-notification,同样提供跨平台的定时通知能力。
这些插件本质还是调用原生平台的系统机制,无法绕过各自平台的限制,开发时仍需遵循对应平台的权限和规范。
关键注意事项
- Android:部分厂商定制系统(如小米、华为)有严格后台管控,需引导用户将应用加入「后台白名单」,避免闹钟或 WorkManager 任务被拦截;
- iOS:通知权限是前提,若用户禁用通知权限,所有定时推送都会失效;本地通知的触发时间受系统调度影响,无法保证绝对精确。
内容的提问来源于stack exchange,提问作者Juan Sin Miedo
相关产品推荐
相关产品推荐

