iOS 16设备后台接收FCM通知无声音问题求助
解决iOS 16后台FCM通知无声音问题
1. 移除不必要的contentAvailable字段
你的APNS payload中设置了contentAvailable: true,这个字段用于静默通知(仅唤醒应用后台处理数据,不主动展示通知)。即便同时配置了alert和sound,iOS 16仍可能优先将其识别为静默通知,导致后台不播放声音。
如果你的需求只是展示带声音的通知,无需后台唤醒应用处理数据,直接移除该字段:
const message: Message = { apns: { headers: { "apns-priority": "10", }, payload: { "aps": { "alert" : { "title" : "Rise and Shine", "body" : "Time to wake up! Get up and move!" }, sound: "default" } } }, data: { value: '850', }, token: await getFCMToken() }
若确实需要后台唤醒+通知展示,可在APNS headers中添加apns-mutable-content: 1,确保iOS正确识别为通知型消息:
apns: { headers: { "apns-priority": "10", "apns-mutable-content": "1" }, payload: { "aps": { "alert" : { "title" : "Rise and Shine", "body" : "Time to wake up! Get up and move!" }, contentAvailable: true, sound: "default" } } }
2. 验证设备通知系统设置
即使前台通知正常,仍需确认设备端应用的通知配置:
- 打开设置 > 你的应用 > 通知
- 确保声音选项处于开启状态
- 确认通知样式设置为横幅或提醒(而非“无”)
3. 检查sound字段格式
iOS 16中,使用系统默认声音时"default"是正确写法;若用自定义声音,需指定完整文件名(含扩展名,如"custom_sound.caf")。你的场景前台正常,此问题概率较低,但可快速验证格式是否正确。
4. 简化后台模式配置
你已开启Remote notifications后台模式,这是通知推送必需的。若无需后台数据拉取或处理,可关闭Background fetch和Background processing,避免不必要的系统逻辑干扰。
5. 确认FCM消息类型
当消息同时包含apns.payload(通知内容)和data字段时,FCM会发送通知+数据类型消息:
- 前台:由
UNUserNotificationCenterDelegate的willPresent处理,你已配置.sound,所以正常播放 - 后台:通知由APNS直接展示,数据在用户点击后传递。若
contentAvailable导致APNS识别为静默通知,就会跳过声音播放。
按上述步骤调整后,重新测试后台通知的声音播放。
内容的提问来源于stack exchange,提问作者Adrian Pascu
相关产品推荐
相关产品推荐

