2016-06-24 18 views
5

Ho implementato la mia sottoclasse di FirebaseMessagingService e sto ricevendo correttamente i messaggi downstream in FirebaseMessagingService.onMessageReceived(RemoteMessage). Il mio problema è che RemoteMessage.getMessageId() restituisce sempre null. Da quello che ho capito, l'ID del messaggio è obbligatorio e dovrebbe essere generato automaticamente dal server FCM. In effetti, chiamando https://fcm.googleapis.com/fcm/send restituisce un ID messaggio, non riesco ad accedervi dal lato dell'app.FCM Android - ID messaggio null

C'è qualcosa che mi manca?

Ecco la mia FCM classe di servizio di messaggistica:

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

Puoi pubblicare la tua classe 'FirebaseMessagingService'? –

+1

È solo un'implementazione minima di base, ma ecco qui. – SpaceBison

+0

Okaay .. Scusa. Sto ancora guardando in giro. Sono un po 'confuso. Dove hai trovato che l'ID del messaggio * è obbligatorio e dovrebbe essere generato automaticamente dal server FCM. *? Puoi fornire il messaggio di esempio che stai ricevendo quando chiami 'https: // fcm.googleapis.com/fcm/send'? :) –

risposta

12

Come di Firebase Android SDK 9.4 questo problema è stato risolto

Dal release notes:

FISSORemoteMessage#getMessageId() ora restituisce l'id-messaggio corretto per i messaggi ricevuti. In precedenza, restituiva null.

Aggiornamento del com.google.firebase:firebase-messaging dipendenze alla versione 9.4.0 ha infatti risolto il problema.


Aggiornamento 2016/07/02: sono stato informato che questo è davvero un bug e una correzione sarà inclusa nella release più vicino.


Si scopre che non è possibile ottenere l'ID del messaggio sul lato dell'app. Ho chiesto il supporto Firebase aiuto e questo è quello che mi hanno detto:

Quando FCM ha riceve con successo la richiesta, tenterà di consegnare a tutti i dispositivi sottoscritti, FCM restituirà una risposta che include messageID a il tuo server. Non è possibile ottenere direttamente MessageID sul lato client (dispositivo Android). MessageID è un parametro nel carico utile di risposta.

Come soluzione temporanea, sto generando identificatori di messaggi personalizzati sul server e li ho trasferiti nel payload.

Cosa fa effettivamente RemoteMessage.getMessageId() rimane un mistero.

+0

Sei mesi dopo, nessun cambiamento, getMessageID restituisce ancora null, in diretta opposizione all'attuale documentazione. Peccato, perché sarebbe stato molto utile avere dei descrittori unici negli Intenti per avviare la tua app. – Anders8

+0

In realtà è passato solo un mese (sono europeo;)). Tuttavia, il bug non è stato corretto da allora. Spero che sarà affrontato nella prossima versione. – SpaceBison

+1

Questo è molto strano. Il metodo 'getMessageId()' funziona bene per il mio dispositivo ASUS, ma restituisce 'null' sul mio dispositivo SAMSUNG. Sto usando lo stesso codice con la versione 9.4.0. – Machado