Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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 Twój serwer aplikacji implementuje protokół XMPP Connection Server , może odbierać wiadomości wysyłane z urządzenia użytkownika do chmury. Aby zainicjować wiadomość nadrzędną, aplikacja kliencka wysyła żądanie zawierające następujące informacje:

  • Adres odbierającego serwera aplikacji 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 w celu 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ć wiadomość upstream 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ługuj wywołania zwrotne wiadomości w górę

Za pomocą FirebaseMessaging możesz zaimplementować wywołania zwrotne onMessageSent i onSendError , aby sprawdzić stan nadrzędnych 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 komunikatów po osiągnięciu limitu 20 komunikatów, zwraca SendException#ERROR_TOO_MANY_MESSAGES .

W przypadkach, gdy urządzenie jest w trybie offline lub usługa FCM jest niedostępna do przekazywania wiadomości nadrzędnych na Twój serwer, instancje aplikacji klienckiej na Androida mogą zgromadzić maksymalnie 20 oczekujących wiadomości. 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ć wykorzystanie sieci, FCM grupuje odpowiedzi do onMessageSent i onSendError , więc potwierdzenie każdej wiadomości może nie być natychmiastowe.

Odbieraj wiadomości XMPP na serwerze aplikacji

Kiedy FCM odbiera wywołanie przesyłania wiadomości z aplikacji klienckiej, generuje niezbędną sekcję XMPP do wysłania wiadomości wysyłania. FCM dodaje category i pola from pola, 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ą unikalny 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>

Więcej informacji na temat składni komunikatów nadrzędnych można znaleźć w dokumencie XMPP Connection Server Reference .