Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Wysyłanie wiadomości upstream na Androida

Jeśli serwer aplikacji implementuje protokół serwera połączeń XMPP , może odbierać komunikaty nadrzędne z urządzenia użytkownika do chmury. Aby zainicjować komunikat nadrzędny, aplikacja kliencka wysyła żądanie zawierające następujące 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 komunikatu zawierające pary klucz-wartość ładunku komunikatu.

Po otrzymaniu tych danych FCM tworzy sekcję XMPP do wysłania do serwera aplikacji, dodając dodatkowe informacje o urządzeniu wysyłającym i aplikacji.

Wyślij wiadomość nadrzędną z aplikacji klienckiej na Androida

Twoja aplikacja na Androida może wysłać upstream wiadomość za pomocą FirebaseMessaging.send :

Jawa

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

Kotlin + KTX

val fm = FirebaseMessaging.getInstance()
fm.send(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 komunikatów nadrzędnych

Dzięki FirebaseMessaging możesz zaimplementować wywołania zwrotne onMessageSent i onSendError aby sprawdzić stan wysyłanych wiadomości. W przypadkach błędów onSendError zwraca SendException z kodem błędu. Na przykład, jeśli klient próbuje wysłać więcej wiadomości po osiągnięciu limitu 20 wiadomości, zwraca SendException#ERROR_TOO_MANY_MESSAGES .

W przypadkach, gdy urządzenie jest w trybie offline lub usługa FCM jest niedostępna do przekazywania dalej komunikatów na serwer, wystąpienia aplikacji klienta systemu Android mogą zgromadzić maksymalnie 20 oczekujących komunikatów. Jeśli takie wiadomości wygasają, zanim FCM będzie mógł je pomyślnie wysłać, onSendError zwraca SendException#ERROR_TTL_EXCEEDED .

Aby zoptymalizować wykorzystanie sieci, FCM onMessageSent odpowiedzi na onMessageSent i onSendError , więc potwierdzenie może nie być natychmiastowe dla każdej wiadomości.

Odbieraj komunikaty XMPP na serwerze aplikacji

Gdy FCM odbiera wywołanie przesyłania komunikatów z aplikacji klienta, generuje niezbędną sekcję XMPP do wysyłania komunikatu nadrzędnego. FCM dodaje category i pola from , a następnie wysyła sekcję podobną do poniższej do serwera aplikacji:

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

W odpowiedzi na wiadomość nadrzędną, taką jak powyższa, serwer aplikacji musi użyć tego samego połączenia, aby wysłać wiadomość ACK zawierającą unikatowy identyfikator wiadomości. Jeśli FCM nie otrzyma potwierdzenia, może ponowić próbę wysłania wiadomości do serwera aplikacji.

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

Aby uzyskać więcej informacji na temat składni komunikatów nadrzędnych, zobacz Dokumentacja serwera połączeń XMPP .