Se o servidor do app implementar o protocolo do servidor de conexão XMPP, ele poderá receber 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);
em que:
message.To
é o endereço do servidor do app de destino no formatoSENDER_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 de aplicativos
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
Em resposta a uma mensagem upstream como a mostrada acima, o servidor do app deve usar a mesma conexão para enviar uma ACK com o ID exclusivo da mensagem. Se o FCM não receber uma ACK, pode ser que ele tente enviar a mensagem para o servidor do app novamente.
<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.