.NET MAUI iOS静默推送:ReceivedRemoteNotification等方法未触发
结合你的代码实现和场景细节,导致最初静默推送未触发目标处理方法的核心原因主要有以下几点:
1. 自定义字段放置位置违反APNs规范
你的静默推送负载中,将自定义键CustomKey = "GetData"放在了ApsPayload(即苹果规范的aps字典)内部,但APNs明确要求自定义业务字段必须放在aps字典的外部层级。这种错误会让APNs无法正确识别推送的静默类型,进而跳过后台静默推送的处理逻辑,转而走普通通知的代理流程。
2. 方法选择与Export签名匹配问题
iOS针对静默推送(无论应用处于前台还是后台),只会触发带fetchCompletionHandler的application:didReceiveRemoteNotification:fetchCompletionHandler:方法,不带完成回调的application:didReceiveRemoteNotification:仅适用于旧版普通推送场景。同时你提到重写方法无法被识别,依赖[Export]装饰器时,若签名与原生Objective-C方法名存在任何差异,都会导致系统无法调用你的自定义处理方法。
3. UNUserNotificationCenterDelegate的拦截干扰
你在启动流程中设置了UNUserNotificationCenter.Current.Delegate = this;,当静默推送负载不符合规范时(比如自定义字段错误放入aps内),APNs会误将其识别为普通通知,进而触发DidReceiveNotificationResponse方法,而非预期的远程通知处理方法。
4. 后台权限配置缺失(潜在因素)
若应用未开启后台模式中的"远程通知"权限(即Info.plist中UIBackgroundModes包含remote-notification项),iOS会直接拒绝触发静默推送的后台处理逻辑,这也是静默推送失效的常见诱因。
内容的提问来源于stack exchange,提问作者Dumber_Texan2

