2016-07-02 9 views
7

Affronto un problema molto strano; Avevo una versione precedente della mia applicazione pubblicata usando GCM 8.4.0 che funzionava bene. Ho aggiornato un po 'di codice, senza modificare nulla su GCM e mi sono reso conto che i messaggi non venivano più ricevuti quando l'applicazione era in background. Questo su diversi dispositivi.Messaggio dati FCM non ricevuto in Android quando l'applicazione è in background

Poiché non sono riuscito a trovare alcuna spiegazione, sono migrato a FCM. Ho fatto alcuni tentativi infruttuosi e ha iniziato a funzionare!?! Quindi sono stato in grado di inviare diversi messaggi con successo senza modificare nulla! Houra !!!!

Poco prima di generare il mio APK firmato, ho fatto un ultimo test! Arrggghhhhh .... i messaggi non sono più stati ricevuti quando l'applicazione era in background !!!!

Ho eseguito il test con il mio server, con Advance REST Request, nelle stesse condizioni utilizzate per tentativi riusciti e in nessun modo, funziona quando l'applicazione è in primo piano ma non più quando l'applicazione è in background !!!

Hai provato questo problema ???

io preciso che quando ricevo un messaggio con l'applicazione in primo piano e ho generare una notifica da esso, ci sono 2 diversi comportamenti:

  • Quando l'applicazione è in grado di riceverlo in background, le la notifica rimane quando faccio scorrere l'app dall'elenco delle app recenti.

  • Quando l'applicazione non è in grado di riceverlo in background, come nel mio caso corrente, la notifica generata viene rimossa quando faccio scorrere l'applicazione.

Significa qualcosa di utile?

Modifica
ho aggiornato alla 9.2.0, ma il problema rimane.

+0

Sarebbe utile vedere le richieste che state facendo per inviare messaggi e il codice utilizzato per ricevere i messaggi. I messaggi di dati FCM dovrebbero comportare una richiamata su onMessageReceived se l'app è in primo piano o in background. –

risposta

4

Così ho capito di lavoro poche settimane fa, ma la ricostruzione del progetto con diversi aggiornamenti, studio, sdk, java, ho non può più far funzionare lo stesso progetto ora.

Ho trascorso alcune ore per esplorare il web, in particolare StackOverflow su questo problema e la risposta che potrei fare è "Dipende ...". Io personalmente l'ho fatto funzionare, non funziona più, per alcuni di voi funziona, per alcuni altri non è così ...

così ho iniziato dal FireBase quickstart-android project e quello che posso dire è:

No, i messaggi di dati non vengono ricevuti quando l'applicazione è in background. O forse direi: i messaggi di dati non vengono più ricevuti quando l'applicazione è in background.

Quindi faccio la domanda a Firebase-support aspettandomi una buona risposta. Sono rimasto davvero deluso, la risposta è:

Ciao ... squadra,

Grazie per averci contattato.

In realtà il carico utile dei dati non dovrebbe essere ricevuto in background. Gli intenti dei messaggi di dati vengono consegnati all'applicazione e ricevuti all'interno del metodo onMessageReceived() (che non viene attivato in background). Vengono visualizzati solo messaggi/notifiche quando l'app è in background.

...

Cordiali saluti, K ...

Non so cosa ne pensate di questo, ma per me è un vero disastro!

Non so se si tratta di una situazione temporanea o meno, forse qualcuno potrebbe avere informazioni più precise perché non posso credere che la ricezione dei messaggi in background non sia più supportata. O almeno per noi, perché secondo i miei ceppi, il dispositivo riceve i messaggi di fondo che espongono il seguente messaggio:

07-18 15:28:34.371 3068-3068/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.google.firebase.quickstart.fcm (has extras) } 

Ma la onMessageReceive() richiamata non è invocato!

EDIT IMPORTANTE
Costruire questo tipo di progetto, ad esempio FireBase quickstart-android project da strumenti a linea di comando funziona perfettamente, ma non quando si costruisce dal pulsante di debug IDE. Se vuoi costruire il tuo progetto dal pulsante di debug IDE, usa Android Studio 1.5 strano ma funziona perfettamente).

Il test case completo è disponibile here.

+0

Molto interessante. E come si aspettano che un gruppo di utenti riceva lo stesso messaggio in un'altra lingua? Qualcuno ha qualche idea? – Anfet

+0

@Anfet. Nel mio caso, quando un dispositivo si registra sul mio server, registro la lingua del dispositivo. Quindi so quale lingua usare per ciascun utente. – 2ndGAB

+0

* Gli intenti dei messaggi di dati vengono consegnati all'applicazione e ricevuti all'interno del metodo onMessageReceived() (che non viene attivato in background). Solo i messaggi di visualizzazione/le notifiche vengono consegnati quando l'app è in background. * Nessuna di queste affermazioni è vera –

3

Siamo spiacenti, non ho prestato attenzione al fatto che delay_while_idle è stato impostato su true per errore.

Modifica
Il comportamento è strano comunque perché anche con delay_while_idle= true, la mia domanda precedentemente pubblicato con GCM 8.4.0 e costruito con lo Studio 1.5.2, mentre riceve i messaggi in background.
Lo stesso progetto ricostruito con Studio 2.1.2. (nulla è cambiato nel progetto tranne l'aggiornamento richiesto a gradle 2.1.2) non riceve i messaggi mentre è in background, che è il comportamento previsto.
Ma non lo riceve neanche mentre viene in primo piano!
L'aggiornamento a FCM 9.2.0 funziona in modo simile, ovvero non riceve i messaggi mentre è in background, ok, ma non lo riceve mentre viene visualizzato in primo piano, il che sembra non corretto.

** EDIT 2 **

io definitivamente non riesco a farlo funzionare più

Problemi correlati