You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复:userNotificationCenter(_:didReceive:withCompletionHandler:)未被调用?

问题排查与修复方案

1. 补全前台通知展示代理方法

当APP处于前台时,系统默认不会弹出通知横幅,导致你无法点击触发目标方法。在AppDelegate的UNUserNotificationCenterDelegate扩展中添加以下方法,允许前台显示通知:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    // 允许前台显示通知横幅、声音和角标
    completionHandler([.alert, .sound, .badge])
}

2. 修正通知内容的取值逻辑

Firebase推送的通知内容默认嵌套在aps字典中,你当前的取值代码无法正确获取标题和消息(这不是方法不触发的直接原因,但会导致后续逻辑失效),替换为以下代码:

// 替换原有的title和message取值逻辑
if let aps = userInfo["aps"] as? [String: Any],
   let alertDict = aps["alert"] as? [String: Any],
   let title = alertDict["title"] as? String,
   let message = alertDict["body"] as? String {
    // 后续视图跳转逻辑...
}

3. 确认代理设置的有效性

虽然你已设置UNUserNotificationCenter.current().delegate = self,但需确保代码执行顺序正确:先设置代理,再请求通知权限。当前代码顺序没问题,但可以再确认didFinishLaunchingWithOptions方法中没有其他代码覆盖代理设置。

4. 验证不同APP状态下的触发情况

  • 后台状态:将APP切换到后台(不要完全退出),发送通知后点击横幅,检查控制台是否输出didReceive method is called。
  • APP完全退出状态:杀掉APP进程后发送通知,点击横幅启动APP,确认方法是否被触发。

5. 检查推送配置完整性

确认你的APNs推送证书在Apple开发者后台有效,且已正确上传到Firebase控制台;同时检查设备能正常获取FCM Token(控制台会输出Firebase registration token: xxx,确认该日志存在)。


内容的提问来源于stack exchange,提问作者Ihor Dolhalov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:53:11