Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Wysyłanie wiadomości upstream na Androida

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Jeśli serwer aplikacji implementuje protokół XMPP Connection Server , 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 wiadomości zawierające pary klucz-wartość ładunku wiadomości.

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ść upstream z aplikacji klienckiej na Androida

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

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

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")
})

Obsługuj zwrotne wiadomości zwrotne

Dzięki FirebaseMessaging możesz zaimplementować wywołania zwrotne onMessageSent i onSendError w celu sprawdzenia stanu wiadomości nadawczych. W przypadku 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 komunikatów nadrzędnych na Twój serwer, wystąpienia aplikacji klienckiej dla systemu Android mogą zgromadzić maksymalnie 20 oczekujących komunikatów. Jeśli takie wiadomości wygasną, zanim FCM będzie mógł je pomyślnie wysłać, onSendError zwraca SendException#ERROR_TTL_EXCEEDED .

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

Odbieraj wiadomości XMPP na serwerze aplikacji

Gdy FCM odbiera wywołanie wysyłania wiadomości z aplikacji klienckiej, generuje niezbędną sekcję XMPP do wysłania komunikatu nadrzędnego. FCM dodaje category from pola, a następnie wysyła do serwera aplikacji następującą sekcję:

<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 komunikat nadrzędny, taki jak powyżej, serwer aplikacji musi użyć tego samego połączenia, aby wysłać komunikat ACK zawierający unikalny identyfikator komunikatu. Jeśli FCM nie otrzyma potwierdzenia ACK, 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>

Zobacz XMPP Connection Server Reference , aby uzyskać więcej informacji na temat składni komunikatów nadrzędnych.