2016-06-24 12 views
5

Zaimplementowałem swoją podklasę FirebaseMessagingService i pomyślnie otrzymuję wiadomości niższego rzędu w FirebaseMessagingService.onMessageReceived(RemoteMessage). Mój problem polega na tym, że RemoteMessage.getMessageId() zawsze zwraca null. Z tego co zrozumiałem, identyfikator wiadomości jest obowiązkowy i powinien być generowany automatycznie przez serwer FCM. W rzeczywistości wywołanie https://fcm.googleapis.com/fcm/send zwraca identyfikator wiadomości, po prostu nie mogę uzyskać do niego dostępu po stronie aplikacji.FCM Android - identyfikator pustej wiadomości

Czy jest coś, czego mi brakuje?

Oto mój FCM klasy usługi wiadomości:

public class FcmMessagingService extends FirebaseMessagingService { 
    private static final String TAG = "FcmMessagingService"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Logg.d(TAG, "Received message; id: " + remoteMessage.getMessageId()); 
     Map<String, String> data = remoteMessage.getData(); 
     Logg.d(TAG, "Data: " + data); 

     String message = data.get("message"); 
     /* ... */ 
    } 
} 
+0

Czy możesz opublikować swoją klasę "FirebaseMessagingService"? –

+1

To tylko podstawowe minimalne wdrożenie, ale proszę bardzo. – SpaceBison

+0

Okaay .. Przepraszam. Wciąż się rozglądam. Jestem trochę zmieszany. Gdzie znaleziono * identyfikator wiadomości jest obowiązkowy i powinien być automatycznie generowany przez serwer FCM. *? Czy możesz podać przykładowy komunikat, który otrzymujesz, wywołując 'https: // fcm.googleapis.com/fcm/send'? :) –

Odpowiedz

12

Od Firebase Android SDK 9.4 problem ten został rozwiązany

Z release notes:

STAŁYRemoteMessage#getMessageId() teraz zwraca poprawny identyfikator wiadomości dla otrzymanych wiadomości. Poprzednio zwracano null.

Aktualizacja zależności com.google.firebase:firebase-messaging na wersję 9.4.0 naprawiła problem.


Aktualizacja 07.02.2016: poinformowano mnie, że jest to rzeczywiście bug fix i zostaną uwzględnione w najbliższym wydaniu.


Okazuje się, że nie możemy uzyskać identyfikatora wiadomości po stronie aplikacji. Ja zapytałem Firebase wsparcie dla pomocy i to jest to, co powiedziano mi:

Kiedy FCM powodzeniem odbiera żądanie, będzie próbować dostarczyć do wszystkich subskrybowanych urządzeń, FCM zwróci odpowiedź, która zawiera komunikatu na twój serwer. Nie można bezpośrednio uzyskać identyfikatora wiadomości po stronie klienta (urządzenia z systemem Android). Identyfikator komunikatu jest parametrem w ładunku odpowiedzi.

Jako obejście generuję niestandardowe identyfikatory wiadomości na serwerze i przekazuję je w polu danych.

To, czym naprawdę jest RemoteMessage.getMessageId(), pozostaje zagadką.

+0

Sześć miesięcy później, bez zmian, getMessageID nadal zwraca wartość zerową, w bezpośredniej sprzeczności z obecną dokumentacją. Szkoda, ponieważ byłoby to bardzo przydatne w posiadaniu unikalnych deskryptorów w intencjach uruchomienia aplikacji. – Anders8

+0

Właściwie to był tylko miesiąc (jestem Europejczykiem;)). Mimo to błąd nie został naprawiony od tego czasu. Mam nadzieję, że zostanie to zaadresowane w następnym wydaniu. – SpaceBison

+1

To bardzo dziwne. Metoda 'getMessageId()' działa dobrze dla mojego urządzenia ASUS, ale zwraca 'null'to moje urządzenie SAMSUNG. Używam tego samego kodu z wersją 9.4.0. – Machado

Powiązane problemy