Ir para o console

Enviar mensagens upstream no iOS

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 de aplicativos de destino no formato SENDER_ID@fcm.googleapis.com.
  • um código da mensagem que deve ser exclusivo para cada código 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 uma mensagem upstream de um app cliente iOS

Para enviar mensagens upstream ao servidor, um app cliente do iOS cria uma mensagem, conecta-se ao FCM e chama sendMessage.

Para se conectar, defina a sinalização shouldEstablishDirectChannel como YES no AppDelegate. O FCM gerencia a conexão, fechando-a quando o app entra em segundo plano e reabrindo-a sempre que o app está no primeiro plano.

Configure a chamada para sendMessage, conforme mostrado abaixo:

Objective-C

[[FIRMessaging messaging] sendMessage:message
                                   to:receiver
                        withMessageID:messageID
                           timeToLive:ttl];

Swift

Messaging.messaging().sendMessage(message,
                                     to: to,
                                     withMessageID: messageId,
                                     timeToLive: ttl)

Em que:

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

  • withMessageID é 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 é um dicionário de chaves e valores como strings. Qualquer par de chave-valor que não é uma string é ignorado;

  • timeToLive é o momento da publicação. 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 ser recebida no servidor de conexão do FCM, essa mensagem é enviada ao servidor de apps.

Processar retornos de chamada de mensagens upstream

Processe retornos de chamada upstream adicionando observadores que detectam sendDataMessageFailure e sendDataMessageSuccess e, em seguida, recuperam as informações de erro dos seletores. Neste exemplo, FIRMessagingSendErrorNotification é o seletor usado para processar o retorno de chamada:

- (void)sendDataMessageFailure:(NSNotification *)notification {
  NSString *messageID = (NSString *)message.object;
}
- (void)sendDataMessageSuccess:(NSNotification *)notification {
  NSString *messageID = (NSString *)message.object;
  NSDictionary *userInfo = message.userInfo; // contains error info etc
}

Para otimizar o uso da rede, o FCM lança respostas para sendDataMessageFailure e sendDataMessageSuccess, portanto, a confirmação pode não ser imediata para cada mensagem.

Receber mensagens XMPP no servidor de apps

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

<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 código 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 de servidor de conexão XMPP para mais informações sobre a sintaxe de mensagens upstream.