Отправка восходящих сообщений из клиентского приложения C ++

Если ваш сервер приложений реализует сервер XMPP соединения протокола, он может получить добывающие сообщения от устройства пользователя в облаке. Чтобы инициировать восходящее сообщение, клиентское приложение отправляет запрос, содержащий следующее:

  • Адрес принимающего сервера приложений в формате SENDER_ID@fcm.googleapis.com .
  • Сообщение ID , который должен быть уникальным для каждого отправителя ID .
  • Данные сообщения, содержащие пары ключ-значение полезной нагрузки сообщения.

Получив эти данные, FCM создает раздел XMPP для отправки на сервер приложений, добавляя некоторую дополнительную информацию об отправляющем устройстве и приложении.

Отправка восходящего сообщения из клиентского приложения C ++

Для отправки сообщения , вверх по течению на сервер, клиент ++ приложение C компонует сообщение и вызовы Send как показано ниже:

::firebase::messaging::Message message;
message.to = SENDER_ID + "@fcm.googleapis.com";
message.message_id = get_unique_message_id();
message.data["my_message", "Hello World");
message.data["my_action", "SAY HELLO");
message.time_to_live = TIME_TO_LIVE;
::firebase::messaging::Send(message);

куда:

  • message.to это адрес принимающего сервера приложений в формате SENDER_ID@fcm.googleapis.com .

  • message.message_id представляет собой уникальный идентификатор сообщения. Все обратные вызовы получателя сообщения идентифицируются на основе этого идентификатора сообщения.

  • message.data является отображением ключей и значений как строки.

  • message.time_to_live определяет , сколько времени (в секундах) , сообщение следует хранить в памяти FCM , если устройство отсутствует. Если FCM не может доставить сообщение до истечения этого срока, он отправляет уведомление клиенту.

Клиентская библиотека FCM кэширует сообщение в клиентском приложении и отправляет его, когда у клиента есть активное соединение с сервером. Получив сообщение, FCM отправляет его на сервер приложений.

Получать сообщения XMPP на сервере приложений

Когда FCM получает вызов восходящего обмена сообщениями от клиентского приложения, он генерирует необходимую строфу XMPP для отправки восходящего сообщения. FCM добавляет category и from полей, а затем посылает строфу как следующий сервер приложений:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
          "hello":"world",
      },
      "message_id":"m-123",
      "from":"REGID"
  }
  </gcm>
</message>

Отправка сообщения ACK

В ответ на вышестоящее сообщение, подобное приведенному выше, сервер приложения должен использовать то же соединение для отправки сообщения ACK, содержащего уникальный идентификатор сообщения. Если FCM не получает ACK, он может повторить попытку отправки сообщения на сервер приложения.

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

См Код подключения сервера XMPP для получения дополнительной информации о входе синтаксиса сообщений.