iOS端通过FCM接收推送时sound字段始终为null问题求助
iOS FCM推送sound字段始终为null的排查方案
1. 避免FCM通知字段覆盖自定义配置
如果同时发送notification通知消息和自定义APNs payload,FCM可能会自动生成APNs的alert字段,覆盖你在apns.payload.aps中设置的sound。解决方式:
- 若要完全自定义推送样式,建议发送数据消息(移除
notification字段),由客户端自行处理推送展示; - 若必须保留
notification字段,需在apns.notification中同步配置sound,而非仅在apns.payload.aps里设置:
apns: { notification: { sound: inputs.sound.split('.')[0] + '.aiff' }, payload: { aps: { badge: 50, sound: inputs.sound.split('.')[0] + '.aiff' } } }
2. 验证sound文件的有效性
- 确保目标sound文件(如
xxx.aiff)已添加到iOS项目主bundle中,文件名与配置完全一致(区分大小写); - 检查
inputs.sound的取值:如果inputs.sound为空、格式错误,或转换后的文件名对应文件不存在,都会导致sound字段为null。
3. 排查客户端接收逻辑
- 若应用在前台接收推送,检查
UNNotificationServiceExtension或应用内的推送处理代码,确认没有将sound字段重置为null的逻辑; - 验证iOS设备的推送权限:确保应用的通知声音权限已开启(设置→通知→你的应用→声音)。
4. 修正后端payload的大小写错误
你的payload中存在字段大小写错误:AndroidConfig应改为android(FCM字段区分大小写),虽然不影响iOS,但可避免其他潜在问题:
// 错误写法 AndroidConfig: { sticky: inputs.sticky } // 正确写法 android: { notification: { // 原Android配置内容 }, sticky: inputs.sticky }
5. 测试最小化payload定位问题
简化payload为最小可用结构,测试是否能正常接收sound:
apns: { payload: { aps: { alert: "测试推送", sound: "alert.aiff", badge: 1 } } }
如果该payload能正常接收sound,再逐步添加其他字段,定位冲突点。
内容的提问来源于stack exchange,提问作者Ahmed Bassam Galal
相关产品推荐
相关产品推荐

