FCM推送iOS应用时Sound字段报错,请求技术协助
问题分析与解决建议
这个问题我之前也碰到过,核心原因是你把sound字段放错了位置——FCM的notification对象并不支持sound这个属性,它属于平台专属的配置项,所以Firebase会抛出"Unknown name 'sound' at 'message.notification'"的错误。
错误原因拆解
FCM的消息结构中,notification字段仅负责定义跨平台通用的通知展示内容(比如标题、正文),而像声音、徽章这类和具体平台(iOS/Android)相关的配置,需要放在对应的平台专属字段里:
- 针对iOS,声音配置要放在
apns.payload.aps.sound中(遵循APNs的payload规范) - 针对Android,声音配置要放在
android.notification.sound中
修正后的代码示例
下面是调整后的Cloud Functions代码,针对iOS配置默认推送声音:
return admin.database().ref('/fcmToken/' + userUid).once('value', snapshot => { const values = snapshot.val() const fcmToken = values.fcmToken var message = { notification: { body: 'New message(s)' }, // 配置iOS专属的推送声音 apns: { payload: { aps: { sound: 'default' // 使用系统默认声音;如果是自定义声音,填文件名(不带后缀) } } }, token: fcmToken }; return admin.messaging().send(message) .then((response) => { return console.log('Successfully sent message:', response); }) .catch((error) => { return console.log('Error sending message:', error); }); })
扩展:同时支持Android和iOS
如果需要给Android也配置推送声音,可以在message中添加android字段:
var message = { notification: { body: 'New message(s)' }, // Android平台声音配置 android: { notification: { sound: 'default' } }, // iOS平台声音配置 apns: { payload: { aps: { sound: 'default' } } }, token: fcmToken };
内容的提问来源于stack exchange,提问作者Koh
相关产品推荐
相关产品推荐

