iOS富通知didReceiveNotificationRequest未触发问题求助
排查NotificationService didReceiveNotificationRequest不触发的问题
看起来你已经搞定了基础推送功能,但富通知的Service Extension死活没触发,确实挺闹心的。我帮你梳理几个高频踩坑点,你逐一排查下:
1. 先确认测试场景是否正确
Notification Service Extension只有在通知需要展示给用户时才会触发:
- 你的App处于后台、锁屏状态;
- 或者App在前台,但你已经在
userNotificationCenter:willPresentNotification:方法中返回了UNNotificationPresentationOptionAlert(允许前台显示通知弹窗)。
如果App在前台但没让通知显示出来,系统是不会调用Extension的,这是很多人一开始忽略的点!
2. 检查Notification Service Extension的配置细节
- Bundle ID规则:Extension的Bundle ID必须是主App Bundle ID的后缀形式(比如主App是
com.yourcompany.yourapp,Extension就得是com.yourcompany.yourapp.NotificationService),系统靠这个关联主App和Extension; - Deployment Target:Extension的部署目标要和主App一致,且不能低于iOS 10(富通知是iOS 10才引入的特性);
- 签名配置:在Xcode的
Signing & Capabilities里,确保Extension的Provisioning Profile有效。注意:Extension不需要开启Push Notifications权限,但签名必须和主App匹配。
3. 核对推送Payload的格式
你截图里看到mutable-content设为1了,但一定要确认这个值是整数类型,而不是字符串"1"!APNs对这个字段的类型要求非常严格,如果后端传的是带引号的字符串,系统会直接忽略,不会触发Extension。
你可以用APNs测试工具直接发送测试Payload,确保格式类似:
{ "aps": { "alert": "测试富通知", "mutable-content": 1 }, "thumbnail_image": "https://example.com/test.png" }
4. 确认主App的推送配置
主App的Capabilities里必须开启Push Notifications,且APNs证书配置正确。虽然基础推送能工作,但偶尔主App的推送权限配置有细微问题,也会影响Extension的触发。
额外提醒:解决触发后的代码小坑
等你搞定Extension触发问题后,你的loadAttachmentForUrlString方法里还有个容易出错的地方:
你用stringByAppendingString:拼接文件扩展名,会生成错误的路径(比如/tmp/xxx.tmppng),正确的做法应该用stringByAppendingPathExtension:,代码修改如下:
NSURL *localURL = [NSURL fileURLWithPath:[temporaryFileLocation.path stringByAppendingPathExtension:extension]];
这样才能生成合法的文件路径,确保UNNotificationAttachment能创建成功。
内容的提问来源于stack exchange,提问作者Semih Akbas
相关产品推荐
相关产品推荐

