iPhone锁屏时Silent push notification无法触发问题求助
iOS 静默推送锁屏不触发问题解决指南
校验推送Payload格式
静默推送必须携带content-available: 1,且不能包含alert、sound、badge这类会触发用户通知的字段——如果有这些字段,系统会判定为普通通知,锁屏时不会唤醒App执行回调。正确的Payload示例:{ "aps": { "content-available": 1 }, "custom_param": "your_custom_data" }确认后台权限配置
- 在Xcode的
Signing & Capabilities面板中,开启Background Modes并勾选Remote notifications选项; - 确保App启动时调用了
UIApplication.shared.registerForRemoteNotifications()完成远程推送注册; - 检查系统设置里的
[你的App] > Background App Refresh是否开启,关闭状态下静默推送无法触发;另外设备开启低电量模式时,系统会严格限制后台活动,也会影响推送触发。
- 在Xcode的
检查回调方法实现
- iOS 13及以上系统,需在
SceneDelegate中实现scene(_:didReceiveRemoteNotification:fetchCompletionHandler:)方法;iOS 12及以下则在AppDelegate中实现application(_:didReceiveRemoteNotification:fetchCompletionHandler:)方法。必须调用传入的fetchCompletionHandler,否则系统会认为你的App处理超时,后续会限制推送唤醒次数。 - 锁屏时Xcode控制台可能不会实时输出日志,建议改用本地文件日志或远程日志平台验证回调是否执行,避免误判。
- iOS 13及以上系统,需在
关于系统缓存与节流
锁屏时iOS为了省电,会对静默推送进行节流处理,可能合并或延迟推送,直到设备解锁、网络切换等时机才批量触发,这是系统原生机制无法完全绕过。你解锁后看到重复日志,就是因为系统缓存了锁屏期间的推送,属于正常现象。
内容的提问来源于stack exchange,提问作者Danny Blok
相关产品推荐
相关产品推荐

