You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:32