Jeśli Twój serwer aplikacji korzysta z parametru protokół XMPP Connection Server, może on odbierać wiadomości z urządzenia użytkownika do chmury. Aby zainicjować wiadomość nadrzędną, aplikacja kliencka wysyła żądanie zawierające te 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 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 błędów onSendError
zwraca SendException
z kodem błędu. Jeśli na przykład klient próbuje
wysłanie kolejnych wiadomości po osiągnięciu limitu 20 wiadomości, funkcja zostanie zwrócona
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 grupuje odpowiedzi na żądanie onMessageSent
i onSendError
, więc potwierdzenie może nie być przeprowadzane natychmiast w przypadku każdej wiadomości.
Odbieraj komunikaty XMPP na serwerze aplikacji
Gdy FCM odbiera przychodzące połączenie komunikacyjne z aplikacji klienckiej, generuje
niezbędną strofę XMPP do wysłania komunikatu.
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łam wiadomość z potwierdzeniem
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 ponowić próbę wysłania 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. .