使用 Arduino 发送 Firebase 消息时出错
Error sending Firebase message with Arduino
我正在尝试使用 nodeMCU 运行 来自主库的 firebase 消息传递草图:https://github.com/FirebaseExtended/firebase-arduino
它连接到 wifi,但在尝试连接到 Firebase 服务器时一直给我第一个连接被拒绝的错误。我已经使用获取令牌实例 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() {
}
对于服务器密钥变量,我尝试使用照片中箭头突出显示的字段:
RELATED IMAGE OF KEYS USED
有没有人成功使用这个草图或者知道我哪里出错了?感谢您的帮助。
这是 Firebase 草图的几个已知问题之一。
每个客户端应用程序实例的 Firebase 注册 ID 应该不同(不在应用程序或设备之间共享)。您可以挖掘由 android 会话生成的那个,但这并不简单。最好通过生成密钥并请求它来获得一个新密钥。
您从控制台获得的遗留 API 密钥是长期有效的,但只会授权对遗留 API 的请求。
HTTP 的 v1 API 使用为服务帐户生成的短期 OAuth2.0 访问令牌。为此,您从您的 firebase 服务帐户生成一个私钥,然后使用该私钥请求将在所有后续消息请求中使用的访问令牌。当令牌过期时,您将使用相同的私钥获得更新的令牌。
您可以在这里阅读:https://firebase.google.com/docs/cloud-messaging/auth-server
如果你真的想重新使用注册 ID,那应该是可能的,但是......试试 FirebaseExtended/firebase-arduino 问题 #250 中发布的草图,其他人报告说示例草图确实有效不是,你遇到了同样的错误。你可以在这里找到:https://github.com/FirebaseExtended/firebase-arduino/issues/250
我正在尝试使用 nodeMCU 运行 来自主库的 firebase 消息传递草图:https://github.com/FirebaseExtended/firebase-arduino
它连接到 wifi,但在尝试连接到 Firebase 服务器时一直给我第一个连接被拒绝的错误。我已经使用获取令牌实例 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() {
}
对于服务器密钥变量,我尝试使用照片中箭头突出显示的字段:
RELATED IMAGE OF KEYS USED
有没有人成功使用这个草图或者知道我哪里出错了?感谢您的帮助。
这是 Firebase 草图的几个已知问题之一。
每个客户端应用程序实例的 Firebase 注册 ID 应该不同(不在应用程序或设备之间共享)。您可以挖掘由 android 会话生成的那个,但这并不简单。最好通过生成密钥并请求它来获得一个新密钥。
您从控制台获得的遗留 API 密钥是长期有效的,但只会授权对遗留 API 的请求。
HTTP 的 v1 API 使用为服务帐户生成的短期 OAuth2.0 访问令牌。为此,您从您的 firebase 服务帐户生成一个私钥,然后使用该私钥请求将在所有后续消息请求中使用的访问令牌。当令牌过期时,您将使用相同的私钥获得更新的令牌。
您可以在这里阅读:https://firebase.google.com/docs/cloud-messaging/auth-server
如果你真的想重新使用注册 ID,那应该是可能的,但是......试试 FirebaseExtended/firebase-arduino 问题 #250 中发布的草图,其他人报告说示例草图确实有效不是,你遇到了同样的错误。你可以在这里找到:https://github.com/FirebaseExtended/firebase-arduino/issues/250