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

使用FCM HTTP v1向多设备推送通知遇报错,求正确实现方法

FCM v1 API 多设备推送通知实现方法

你遇到的问题是因为FCM v1 API和旧版Legacy API的参数规则完全不同,registration_ids、to这些都是Legacy API的字段,v1版本不支持,所以会报未知字段错误。以下是两种用FCM token实现多设备推送的可行方案:

方案一:批量请求(Batch Requests)

适合给不同设备发送定制化内容,或者不想依赖主题的场景:

  • 构造多个独立的单设备推送请求,每个请求的message.token字段设置为单个设备的FCM token,符合v1 API的格式要求
  • 将这些请求打包成批量请求,发送到FCM的批量端点https://fcm.googleapis.com/batch
  • 批量请求的格式要求:
    1. 用自定义边界符分隔每个子请求
    2. 每个子请求需包含HTTP请求头和对应的JSON请求体
  • 示例批量请求内容(简化版):
--batch_myboundary
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /v1/projects/你的项目ID/messages:send HTTP/1.1
Content-Type: application/json

{"message":{"token":"DEVICE_TOKEN_1","notification":{"title":"测试通知","body":"设备1专属消息"}}}
--batch_myboundary
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /v1/projects/你的项目ID/messages:send HTTP/1.1
Content-Type: application/json

{"message":{"token":"DEVICE_TOKEN_2","notification":{"title":"测试通知","body":"设备2专属消息"}}}
--batch_myboundary--
  • 注意:单批次批量请求最多包含500个子请求,超过需拆分批次。

方案二:主题订阅推送

适合给大量设备发送相同内容的场景:

  • 让所有目标设备在客户端订阅同一个自定义主题(比如"app_updates"),各平台客户端有对应API(如Android端调用FirebaseMessaging.getInstance().subscribeToTopic("app_updates"))
  • 服务端调用v1 API时,请求体中message.topic字段设置为该主题名,无需指定单个token
  • 示例请求体:
{
  "message": {
    "topic": "app_updates",
    "notification": {
      "title": "全局通知",
      "body": "所有订阅该主题的设备都会收到此消息"
    }
  }
}

关键注意事项

  • FCM v1 API中,仅支持message.token(单个设备)、message.topic、message.condition(条件推送)这些指定目标的字段,请勿使用Legacy API的registration_ids、to等字段
  • 批量请求的Content-Type需设置为multipart/mixed; boundary=你的边界符

内容的提问来源于stack exchange,提问作者Jacky Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:26:13