Enviar mensagens upstream de um app cliente em C++

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.

Quando recebe esses dados, o FCM cria uma estrofe XMPP para enviar ao servidor de aplicativos, adicionando algumas informações adicionais sobre o dispositivo e o aplicativo de envio.

Enviar uma mensagem upstream de um aplicativo de cliente C++

Para enviar mensagens upstream para o servidor, um app cliente C ++ compõe uma mensagem e chama Send como mostrado:

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

onde:

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

  • message.message_id é 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.time_to_live 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 que ela expire, ele enviará uma notificação para o 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 aplicativo:

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