Если ваш сервер приложений реализует протокол сервера соединений XMPP , он может получать восходящие сообщения с устройства пользователя в облако. Чтобы инициировать восходящее сообщение, клиентское приложение отправляет запрос, содержащий следующее:
- Адрес принимающего сервера приложений в формате
SENDER_ID@fcm.googleapis.com
. - Идентификатор сообщения, который должен быть уникальным для каждого идентификатора отправителя .
- Данные сообщения, содержащие пары ключ-значение полезной нагрузки сообщения.
Когда он получает эти данные, FCM создает раздел XMPP для отправки на сервер приложений, добавляя дополнительную информацию об отправляющем устройстве и приложении.
Отправка восходящего сообщения из клиентского приложения Unity
Чтобы отправить сообщения на сервер, клиентское приложение Unity составляет сообщение и вызывает Send
как показано:
Firebase.Messaging.Message message;
message.To = SENDER_ID + "@fcm.googleapis.com";
message.MessageId = get_unique_message_id();
message.Data("my_message", "Hello World");
message.Data("my_action", "SAY HELLO");
message.TimeToLive = kTimetoLive;
Firebase.Messaging.FirebaseMessaging.Send(message);
где:
message.To
— это адрес принимающего сервера приложений в форматеSENDER_ID@fcm.googleapis.com
.message.MessageId
— уникальный идентификатор сообщения. Все обратные вызовы получателя сообщения идентифицируются на основе этого идентификатора сообщения.message.Data
— это карта ключей и значений в виде строк.message.TimeToLive
указывает, как долго (в секундах) сообщение должно храниться в хранилище 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.