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

如何通过FCM从Arduino向Android发送推送通知?含SERVER_KEY查找与代码排查

Arduino通过FCM发送通知问题解决指南

一、找到FCM服务器密钥(SERVER_KEY)

  • 进入Firebase控制台并打开你的项目
  • 点击左侧菜单栏的「项目设置」(齿轮图标)
  • 切换到「Cloud Messaging」标签页
  • 若未看到服务器密钥,下拉页面找到「Legacy server key」区域,点击「生成密钥」(首次需生成)
    • 注意:新创建的Firebase项目默认隐藏Legacy API,需先在同一页面的「Cloud Messaging API (Legacy)」模块点击「启用」,刷新后即可生成并查看服务器密钥

二、代码修正与说明

你的代码存在几个核心问题导致无法运行,修正后的完整代码如下:

#include <WiFi.h>
#include <WiFiClientSecure.h>

WiFiClientSecure client; // 必须使用SSL客户端,FCM强制要求HTTPS
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* SERVER_KEY = "你的FCM服务器密钥";
const char* DEVICE_TOKEN = "目标设备的FCM令牌";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功");
  
  // 跳过SSL证书验证(仅用于测试,生产环境建议添加有效证书)
  client.setInsecure();
}

void sendDataToFirebase() {
  // 使用Raw String Literal避免手动转义引号,简化JSON编写
  String data = R"({
    "to": ")" DEVICE_TOKEN R"(",
    "notification": {
      "body": "Hi",
      "title": "Alarm"
    }
  })";

  Serial.println("开始发送数据...");
  
  // 连接FCM服务器,HTTPS默认端口为443
  if (client.connect("fcm.googleapis.com", 443)) {
    Serial.println("已连接到FCM服务器");
    
    // 发送HTTP请求头,每行结尾必须用\r\n,请求头与请求体间需空行分隔
    client.println("POST /fcm/send HTTP/1.1");
    client.println("Authorization: key=" + String(SERVER_KEY));
    client.println("Content-Type: application/json");
    client.println("Host: fcm.googleapis.com");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println(); // 空行分隔请求头和请求体
    client.print(data);
    
    // 等待服务器响应
    delay(1000);
    Serial.println("\n服务器响应:");
    while (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
  } else {
    Serial.println("连接FCM服务器失败");
  }
  
  Serial.println("\n操作完成");
  client.stop();
}

void loop() {
  sendDataToFirebase();
  delay(30000); // 每30秒发送一次测试通知
}

关键修正点:

  1. 强制HTTPS连接:FCM不支持HTTP协议,必须使用WiFiClientSecure并连接443端口
  2. HTTP格式修正:请求头每行需以\r\n结尾,请求头与请求体之间必须加空行,原代码的换行格式错误导致服务器无法解析
  3. JSON编写优化:用Raw String Literal避免手动转义引号,减少语法错误
  4. 完善基础流程:补充WiFi连接初始化代码,增加连接失败的错误提示
  5. 响应等待逻辑:添加延迟确保服务器返回响应后再读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:03