iOS14系统下App无法接收后台通知信号,相关回调方法不触发求助
iOS14 后台静默推送不触发回调解决方案
- 检查推送请求的
apns-priority字段值:iOS14起静默推送(携带content-available=1)的优先级必须设为5,若设为10会被APNs直接丢弃,不会触发任何回调 - 检查App的后台刷新权限:iOS14收紧了静默推送触发条件,必须确保系统设置>通用>后台App刷新中,全局后台刷新开关和当前App的开关均处于开启状态,否则静默推送会被系统拦截
- 适配SceneDelegate场景:如果你的App使用了SceneDelegate(iOS13及以上默认启用多场景支持),仅实现AppDelegate的回调方法不会触发静默推送响应,需要额外在SceneDelegate中实现对应方法:
- (void)scene:(UIScene *)scene didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // 处理推送逻辑,及时调用completionHandler completionHandler(UIBackgroundFetchResultNewData); }
- 检查推送payload结构:iOS14对同时携带
content-available=1和alert、sound、badge等可展示通知字段的混合推送做了策略调整,如果App处于后台且用户未主动点击通知,不会触发静默推送回调,纯静默推送需移除所有展示类字段 - 检查回调方法的completionHandler调用时机:两个回调方法都必须在系统规定的30秒超时时间内调用completionHandler,iOS14对超时行为的惩罚更严格,多次超时会导致系统降低你的App静默推送配额,甚至长期拦截推送
- 检查UNUserNotificationCenter代理设置:
userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:方法生效的前提是启动时就将[UNUserNotificationCenter currentNotificationCenter].delegate设置为对应的实现对象,避免被其他逻辑覆盖代理
内容的提问来源于stack exchange,提问作者HieuJames
相关产品推荐
相关产品推荐

