UNNotificationServiceExtension通知过滤功能失效问题求助
问题场景
我的远程通知过滤功能无法正常工作,推送的通知模型如下:
{ "headers": { "apns-push-type": "alert" }, "aps": { "alert": { "title": "Test title", "body": "You have received a new message." }, "mutable-content": 1 } }
我能在UNNotificationServiceExtension的func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)方法中捕获到该通知,但调用contentHandler(UNNotificationContent())后,通知仍然会显示在通知中心,无法实现过滤隐藏。
根据苹果官方文档说明:
要静默远程通知,向APNS服务器发送通知时必须将apns-push-type头字段设置为alert,否则系统总会向用户显示通知横幅。
我已按要求配置,但问题依旧。
可能的解决方向
1. 确认通知过滤权限是否开启
检查App的Entitlements文件,确保已添加com.apple.developer.usernotifications.filtering权限并设置为YES。没有这个权限的话,即使在Extension里返回空内容,系统也会强制展示原始通知。
2. 检查Extension代码逻辑
确保调用contentHandler时直接返回空的UNNotificationContent实例,不要先复制原始通知内容再修改。另外注意不要超出Extension的执行时限(约30秒),超时后系统会自动展示原始通知。
3. 验证APNS推送头信息是否正确
部分推送服务器配置可能存在疏漏,导致apns-push-type头没有正确发送到APNS。可以通过推送日志或抓包工具确认请求头中确实包含apns-push-type: alert。
4. 检查系统通知设置
确认用户没有在系统设置中给App开启「始终允许通知」等强制展示选项,部分iOS版本的系统设置会影响通知过滤功能的生效。
5. 确认iOS版本兼容性
通知过滤功能仅在iOS 15及以上版本支持,如果测试设备的iOS版本低于15,该功能不会生效,系统会直接展示通知。
内容的提问来源于stack exchange,提问作者Alina

