Как подключить Firebase cloud messaging к NodeMCU с помощью HttpClient SSL

Я использую NodeMCU для подключения к API FCM для отправки push-уведомления в мобильное приложение. Я проверял в Postman все работает нормально и отправка push-уведомления на мобильные, но проблема, когда я использую класс HttpClient в Arduino дает -1 ошибку, если я сделал по протоколу HTTPS константный тип char* cloudMessagingServer = "https://fcm.googleapis.com/fcm/send"; когда я использую только HTTP без SSL константный тип char* cloudMessagingServer = "http://fcm.googleapis.com/fcm/send"; дает кодом ошибки 403

Мой код

  const char* cloudMessagingServer = "fcm.googleapis.com/fcm/send";

  char json[] = "{\"to\":\"<my_mobile_token>\",\"notification\":{\"title\":\"Hello\",\"body\":\"Yellow\"}}";


  HTTPClient http;
  http.begin(cloudMessagingServer);
  http.addHeader("Authorization", "key=<my_key>");
  http.addHeader("Content-Type", "application/json"); 
  int httpResponseCode = http.POST(json);
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

После некоторых поисков я обнаружил что следует добавить отпечаток пальца хоста для создания SSL запроса

Мой код после добавления отпечатка пальца

  const char* cloudMessagingServer = "fcm.googleapis.com/fcm/send";

  char json[] = "{\"to\":\"<my_mobile_token>\",\"notification\":{\"title\":\"Hello\",\"body\":\"Yellow\"}}";
  const char* fingerprint =            "a9 07 09 14 98 12 22 b8 58 3f db 6e 93 36 f7 3f 13 e2 72 82";

  HTTPClient http;
  http.begin(cloudMessagingServer, fingerprint);
  http.addHeader("Authorization", "key=<my_key>");
  http.addHeader("Content-Type", "application/json"); 
  int httpResponseCode = http.POST(json);
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

когда я использую https во всех случаях, дайте мне -1

, 👍0

Обсуждение

https:// отсутствует в URL-адресе. правильный способ-создать объект WiFiClentSecure и предоставить его HttpClient. см. Пример BasicHttpsClient библиотеки ESP8266HttpClient, @Juraj