Enviar mensagens upstream a partir de um app cliente do Unity

Se o servidor do app implementar o protocolo do servidor de conexão XMPP, ele poderá enviar mensagens upstream do dispositivo do usuário para a nuvem. Para iniciar essa mensagem, o app cliente envia uma solicitação contendo:

  • o endereço do servidor do app de destino no formato SENDER_ID@fcm.googleapis.com;
  • Um ID da mensagem que deve ser exclusivo para cada ID do remetente.
  • Os dados da mensagem, inclusive os pares de chave/valor do payload da mensagem.

Ao receber esses dados, uma estrofe XMPP é criada no FCM para ser enviada ao servidor de apps, acrescentando outras informações sobre o app e o dispositivo remetente.

Enviar mensagens upstream de um app cliente Unity

Para enviar mensagens upstream ao servidor, um app cliente do Unity compõe uma mensagem e chama Send como mostrado:

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);

onde:

  • message.To é o endereço do servidor do app de destino no formato SENDER_ID@fcm.googleapis.com.

  • message.MessageId é um identificador de mensagem exclusivo. Todas as chamadas de retorno do receptor da mensagem são identificadas com base nesse código de mensagem;

  • message.Data é um mapa de chaves e valores como strings.

  • message.TimeToLive especifica por quanto tempo (em segundos) a mensagem deve ser mantida no armazenamento do FCM se o dispositivo estiver off-line. Caso o FCM não consiga entregar a mensagem antes de ela expirar, ele envia uma notificação de volta ao cliente.

A biblioteca de cliente do FCM armazena a mensagem no cache do app cliente e, quando o cliente estabelece uma conexão ativa com o servidor, ela é enviada. Ao receber a mensagem, o FCM a envia para o servidor do app.

Receber mensagens XMPP no servidor do app

Quando uma chamada de mensagem upstream de um app cliente é recebida no FCM, é gerada uma estrofe XMPP para enviar essa mensagem. Os campos category e from são adicionados pelo FCM, que envia uma estrofe como esta ao servidor do app:

<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>

Como enviar mensagens ACK

No servidor do app, para responder a uma mensagem upstream como a mostrada acima, é necessário usar a mesma conexão para enviar uma ACK com o ID exclusivo da mensagem. Se uma ACK não for recebida no FCM, ela será reenviada para o servidor do app.

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

Consulte Referência do servidor de conexão XMPP para mais informações sobre a sintaxe de mensagens upstream.