iOS应用前台时push通知willPresent代理方法不触发是什么原因?
iOS 前台推送
willPresent方法不触发排查方案 配置缺失类问题
- 未设置通知中心代理
必须在应用启动阶段(application:didFinishLaunchingWithOptions:方法内)指定通知中心的代理对象,示例代码:
未设置代理的情况下,系统不会回调// 若代理为AppDelegate则设置为self UNUserNotificationCenter.current().delegate = selfuserNotificationCenter:willPresent:withCompletionHandler:方法。 - 未申请用户通知权限
展示通知弹窗需要用户主动授权,你需要提前调用权限申请接口:
若用户拒绝授权,所有用户通知类回调都不会触发,仅静默推送会走UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in // 自行处理授权结果 }didReceiveRemoteNotification方法。 - 系统版本适配问题
UNUserNotificationCenter相关接口为iOS 10新增特性,若应用最低支持版本低于iOS 10,低版本系统下不会触发对应回调。
推送 payload 类问题
- 收到的是静默推送
若推送 payload 中包含content-available: 1,且没有alert、sound、badge相关字段,属于静默推送,该类推送设计上不会展示通知弹窗,仅会触发didReceiveRemoteNotification回调。 - payload 格式不符合规范
检查推送 payload 中是否包含标准aps字段,以及通知展示所需的对应字段,字段缺失会被系统判定为非用户通知,不会触发用户通知类代理方法。
其他排查点
- 检查是否使用了第三方推送服务,部分第三方推送库会默认接管系统通知代理,导致自定义的代理方法不生效,需要按照第三方库文档设置回调转发。
- 不要在
didReceiveRemoteNotification方法中提前调用错误的completionHandler,或者阻塞主线程,避免打断后续的通知回调流程。
内容的提问来源于stack exchange,提问作者Aravind Bhuvanendran
相关产品推荐
相关产品推荐

