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ść SendException
z 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. .