Wysyłanie wiadomości nadrzędnych w Androidzie

Jeśli Twój serwer aplikacji korzysta z parametru protokół XMPP Connection Server, może on odbierać wiadomości z urządzenia użytkownika do chmury. Aby zainicjować wiadomość nadrzędną, aplikacja kliencka wysyła żądanie zawierające te elementy:

  • Adres serwera aplikacji odbierającej w formacie SENDER_ID@fcm.googleapis.com.
  • Identyfikator wiadomości, który powinien być unikalny dla każdego identyfikatora nadawcy.
  • Dane wiadomości zawierające pary klucz-wartość ładunku wiadomości.

Po otrzymaniu tych danych FCM tworzy strofę XMPP, która wysyła ją do serwera aplikacji. podanie dodatkowych informacji o urządzeniu i aplikacji wysyłającej.

Wysyłanie wiadomości z aplikacji klienckiej na Androida

Aplikacja na Androida może wysyłać wiadomość nadrzędną za pomocą FirebaseMessaging.send:

Kotlin+KTX

val fm = Firebase.messaging
fm.send(
    remoteMessage("$SENDER_ID@fcm.googleapis.com") {
        setMessageId(messageId.toString())
        addData("my_message", "Hello World")
        addData("my_action", "SAY_HELLO")
    },
)

Java

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

Obsługa wywołań zwrotnych wiadomości nadrzędnej

Za pomocą FirebaseMessaging możesz zaimplementować wywołania zwrotne onMessageSent i onSendError w celu sprawdzenia stanu nadrzędnego wiadomości. W przypadku błędów onSendError zwraca SendException z kodem błędu. Jeśli na przykład klient próbuje wysłanie kolejnych wiadomości po osiągnięciu limitu 20 wiadomości, funkcja zostanie zwrócona SendException#ERROR_TOO_MANY_MESSAGES

Gdy urządzenie jest offline lub FCM usługa jest niedostępna dla wiadomości przesyłane z klienta na serwer, instancje aplikacji klienckich na Androida mogą zgromadzić maksymalnie 20 oczekujących wiadomości. Jeśli takie wiadomości wygasną, zanim FCM będzie mógł je wysłać je, onSendError zwraca SendException#ERROR_TTL_EXCEEDED.

Aby zoptymalizować wykorzystanie sieci, FCM grupuje odpowiedzi na żądanie onMessageSent i onSendError, więc potwierdzenie może nie być przeprowadzane natychmiast w przypadku każdej wiadomości.

Odbieraj komunikaty XMPP na serwerze aplikacji

Gdy FCM odbiera przychodzące połączenie komunikacyjne z aplikacji klienckiej, generuje niezbędną strofę XMPP do wysłania komunikatu. FCM dodaje pola category i from, a następnie wysyła do serwera aplikacji w ten sposób:

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

Wysyłam wiadomość z potwierdzeniem

W odpowiedzi na komunikat powyższy, taki jak powyżej, serwer aplikacji musi używać tego samego połączenia, aby wysłać wiadomość ACK zawierającą unikalną wartość identyfikator wiadomości. Jeśli FCM nie otrzyma potwierdzenia, może ponowić próbę wysłania wiadomość do serwera aplikacji.

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

Patrz dokumentacja dotycząca serwera połączenia XMPP. .