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

Legacy Firebase条件在curl调用FCM时失效,如何解决?

解决FCM条件字段报错:仅支持'topics'条件的问题

嗨,我来帮你搞定这个FCM的报错问题!你遇到的这个错误,其实不是官方文档的写法有问题,而是你的curl命令里引号转义出错了——shell解析的时候把你的condition字段内容拆成了不完整的字符串,导致发送给FCM的条件格式无效。

问题根源

看你写的curl命令,-d参数是用单引号包裹的JSON内容,而condition字段里的'dogs'和'cats'用了单引号,这会让shell提前闭合外层的单引号,导致实际发送的JSON里的condition字段内容不完整,FCM自然识别不了,就抛出了“仅支持'topics'条件”的错误。

修正方案

这里给你三种靠谱的解决办法,选你顺手的就行:

方案一:转义单引号(适合bash环境)

把condition里的单引号用'\''替换,这样shell就能正确解析整个JSON字符串了:

curl -X POST \
 -H "Authorization: key=AAAAx4uYEXU:...e8EEq9aCv-pGWXIfyCp_lUp28mY" \
 -H "Content-Type: application/json" \
 -d '{ "data": { "score": "5x1", "time": "15:10" }, "condition": "'\''dogs'\'' in topics || '\''cats'\'' in topics", "content_available": true }' \
 "https://fcm.googleapis.com/fcm/send"

方案二:改用双引号包裹整个JSON内容,转义内部双引号

这种写法更直观,不容易搞混引号:

curl -X POST \
 -H "Authorization: key=AAAAx4uYEXU:...e8EEq9aCv-pGWXIfyCp_lUp28mY" \
 -H "Content-Type: application/json" \
 -d "{ \"data\": { \"score\": \"5x1\", \"time\": \"15:10\" }, \"condition\": \"'dogs' in topics || 'cats' in topics\", \"content_available\": true }" \
 "https://fcm.googleapis.com/fcm/send"

方案三:把JSON内容存成单独文件(最省心)

把payload内容单独写进一个文件,比如fcm_payload.json:

{ 
  "data": { 
    "score": "5x1", 
    "time": "15:10" 
  }, 
  "condition": "'dogs' in topics || 'cats' in topics", 
  "content_available": true 
}

然后用curl读取文件发送,彻底避开引号转义的麻烦:

curl -X POST \
 -H "Authorization: key=AAAAx4uYEXU:...e8EEq9aCv-pGWXIfyCp_lUp28mY" \
 -H "Content-Type: application/json" \
 -d @fcm_payload.json \
 "https://fcm.googleapis.com/fcm/send"

另外要确认你的FCM服务器密钥是有效的,而且目标设备确实订阅了dogs或cats主题哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:27:02