Wysyłanie wiadomości nadrzędnych w Androidzie

Jeśli używasz tagu starszych interfejsów API do wysyłania FCM, zdecydowanie zalecamy migracja do interfejsu API HTTP v1 lub rozważ użycie Pakiet Admin SDK do tworzenia żądań wysyłania.

Jeśli serwer aplikacji implementuje protokół XMPP Connection Server, może odbierać wiadomości z urządzenia użytkownika do chmury. Aby zainicjować wiadomość w górę, aplikacja klienta wysyła żądanie zawierające:

  • Adres serwera aplikacji odbierającej w formacie SENDER_ID@fcm.googleapis.com.
  • Identyfikator wiadomości, który powinien być niepowtarzalny dla każdego identyfikatora nadawcy.
  • Dane wiadomości, które stanowią 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 wystąpienia błędu funkcja onSendError zwraca wartość SendExceptionz kodem błędu. Jeśli na przykład klient spróbuje wysłać więcej wiadomości po osiągnięciu limitu 20 wiadomości, otrzyma odpowiedź 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 wysyła odpowiedzi zbiorczo do onMessageSent i onSendError, więc potwierdzenie może nie być natychmiastowe w przypadku każdej wiadomości.

Odbieranie komunikatów XMPP na serwerze aplikacji

Gdy FCM otrzyma wywołanie przesyłania wiadomości od aplikacji klienta, wygeneruje niezbędny zwrot XMPP do wysłania wiadomości upstream. 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łanie wiadomości potwierdzenia

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 ponownie wysłać 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. .