我正在尝试使用nodeMCU在这里从主库运行firebase消息传递草图:https://github.com/FirebaseExtended/firebase-arduino
它连接到wifi,但在尝试连接到Firebase服务器时一直给我1号拒绝连接错误。我已经使用get token instance ID方法从我的Android应用程序中获取了单个令牌,并将其记录到Android Studio上的控制台中,并使用该令牌通过标准Firebase控制台成功向自己发送了一条消息,因此该令牌是正确的假设。我在定义CLIENT_REGISTRATION_ID中输入了令牌。
因此,我已将令牌和服务器密钥从下图中箭头所突出显示的位置输入到草图中,但是连接没有成功。
这是空白的原始草图:
#include <ESP8266WiFi.h>
#include <FirebaseCloudMessaging.h>
// Set these to run example.
#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "PASSWORD"
#define SERVER_KEY "key_from_dashboard"
#define CLIENT_REGISTRATION_ID "key_from_client_after_registration"
void setup() {
Serial.begin(9600);
// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
FirebaseCloudMessaging fcm(SERVER_KEY);
FirebaseCloudMessage message =
FirebaseCloudMessage::SimpleNotification("Hello World!", "What's happening?");
FirebaseError error = fcm.SendMessageToUser(CLIENT_REGISTRATION_ID, message);
if (error) {
Serial.print("Error:");
Serial.print(error.code());
Serial.print(" :: ");
Serial.println(error.message().c_str());
} else {
Serial.println("Sent OK!");
}
}
void loop() {
}
对于服务器键变量,我尝试使用照片中箭头突出显示的字段:
使用此草图是否有人成功或知道我要去哪里错了?感谢您的帮助。
答案 0 :(得分:0)
这是Firebase草图的几个已知问题之一。
每个客户端应用程序实例的Firebase注册ID均应不同(不能在应用程序或设备之间共享)。您可以挖掘由android会话生成的代码,但这并不简单。最好通过生成密钥并请求它来获得一个新密钥。
从控制台获取的旧版API密钥是长期存在的,但仅会授权对旧版API的请求。
用于HTTP的v1 API使用为服务帐户生成的短期OAuth2.0访问令牌。为此,您需要从Firebase服务帐户生成一个私钥,然后使用该私钥请求将在所有后续消息请求中使用的访问令牌。令牌过期后,您将使用相同的私钥获得更新的令牌。
您可以在这里阅读有关内容:https://firebase.google.com/docs/cloud-messaging/auth-server
如果您真的想重新使用reg ID,尽管...尝试在FirebaseExtended / firebase-arduino问题#250中发布的草图,当示例草图不起作用时,其他人报告说该草图可以工作,与您遇到的相同错误。您可以在这里找到:https://github.com/FirebaseExtended/firebase-arduino/issues/250