7 votes

Message de données FCM non reçu dans Android lorsque l'application est en arrière-plan

Je suis confronté à un problème très étrange ; j'avais une version précédente de mon application publiée en utilisant GCM 8.4.0 qui fonctionnait bien. J'ai mis à jour une partie du code, sans rien changer à la GCM, et je me suis rendu compte que les messages n'étaient plus reçus lorsque l'application était en arrière-plan. Ceci sur plusieurs appareils différents.

Comme je n'ai pas trouvé d'explication, j'ai migré vers FCM. J'ai fait quelques essais infructueux et ça a commencé à fonctionner ! ?! Ensuite, j'ai pu envoyer plusieurs messages différents avec succès sans rien changer ! Houra !!!!

Juste avant de générer mon APK signé, j'ai fait un dernier test ! Arrggghhhhh.... messages n'étaient plus reçus lorsque l'application était en arrière-plan !!!!

J'ai fait le test avec mon serveur, avec Advance REST Request, dans les mêmes conditions que celles que j'ai utilisées pour les tentatives réussies et pas du tout, ça marche quand l'application est en foreground mais plus du tout quand l'application est en background !!!

Avez-vous rencontré un tel problème ?

Je précise que lorsque je reçois un message avec l'application au premier plan et que je génère une notification à partir de celui-ci, il y a 2 comportements différents :

  • Lorsque l'application est capable de la recevoir en arrière-plan, la notification demeure lorsque je fais glisser l'application hors de la liste des applications récentes.

  • Lorsque l'application n'est pas en mesure de la recevoir en arrière-plan, comme dans mon cas actuel, la notification générée est supprimée lorsque je fais glisser l'application vers l'extérieur.

Cela signifie-t-il quelque chose d'utile ?

Modifier
J'ai mis à jour la version 9.2.0, mais le problème demeure.

4voto

fralbo Points 984

J'ai réussi à le faire fonctionner il y a quelques semaines mais en reconstruisant le projet avec plusieurs mises à jour, studio, sdk, java, je ne peux plus faire fonctionner le même projet maintenant.

J'ai passé quelques heures à explorer le web, notamment Stackoverflow à propos de ce problème et la réponse que j'ai pu faire est "It depends....". J'ai personnellement réussi à le faire fonctionner, il ne fonctionne plus, pour certains cela fonctionne, pour d'autres non...

J'ai donc commencé par le Projet FireBase quickstart-Android et ce que je peux dire c'est :

Non, les messages de données ne sont pas reçus lorsque l'application est en arrière-plan. Ou peut-être devrais-je dire : les messages de données ne sont plus reçus lorsque l'application est en arrière-plan.

Je pose donc la question à Support Firebase en espérant une bonne réponse. J'ai été vraiment déçu, la réponse est :

Bonjour ... équipe,

Merci de nous avoir contactés.

En fait, la charge utile des données n'est pas censée être reçue en arrière-plan. Les intentions des messages de données sont transmises à l'application et reçues par la méthode onMessageReceived() (qui ne se déclenche pas en arrière-plan). Seuls les messages d'affichage/notifications sont délivrés lorsque l'application est en arrière-plan.

...

Cordialement, K...

Je ne sais pas ce que vous en pensez mais pour moi c'est un vrai désastre !

Je ne sais pas si c'est une situation temporaire ou non, peut-être que quelqu'un pourrait avoir des informations plus précises parce que je ne peux pas croire que la réception des messages en arrière-plan n'est plus supportée. Ou du moins pour nous, car d'après mes journaux, l'appareil reçoit des messages en arrière-plan affichant le message suivant :

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) }

Mais le onMessageReceive() Le callback n'est pas invoqué !

IMPORTANT EDIT
Construire ce type de projet, par exemple Projet FireBase quickstart-Android à partir des outils en ligne de commande fonctionne parfaitement mais pas lorsque vous le construisez à partir du bouton de débogage de l'IDE. Si vous voulez construire votre projet à partir du bouton de débogage de l'IDE, utilisez le bouton de débogage de l'IDE. Android Studio 1.5 étrange mais qui fonctionne parfaitement).

Le cas de test complet est disponible aquí .

3voto

fralbo Points 984

Désolé, je n'ai pas fait attention à ce que delay_while_idle a été mis à true par erreur.

Modifier
Le comportement est étrange de toute façon car même avec delay_while_idle= true Dans mon application publiée précédemment, utilisant GCM 8.4.0 et construite avec Studio 1.5.2, je reçois des messages en arrière-plan.
Le même projet reconstruit avec Studio 2.1.2. (rien n'a changé dans le projet sauf la mise à jour demandée vers gradle 2.1.2) ne reçoit pas les messages en arrière-plan, ce qui est le comportement attendu.
Mais il ne le reçoit pas non plus en arrivant au premier plan !
La mise à jour vers FCM 9.2.0 fonctionne de la même manière, c'est-à-dire qu'il ne reçoit pas de messages lorsqu'il est en arrière-plan, ce qui est correct, mais il ne les reçoit pas lorsqu'il est en avant-plan, ce qui ne semble pas correct.

** EDIT 2 **

Je n'arrive définitivement plus à le faire fonctionner

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X