Application Android ne reçoit pas de Notification Firebase lorsque l'application est arrêtée du plateau multi-tâches

j'ai lu la même question , cependant, je n'étais pas en mesure d'obtenir la bonne réponse.

j'ai un système dans lequel nous envoyons une notification à environ 500 appareils.

malheureusement, beaucoup de ces appareils ne reçoivent pas la notification. J'ai constaté que les téléphones de la série OPPO F1 ne reçoivent pas particulièrement la notification.

j'ai constaté que cela se produit si l'application est arrêt du plateau multi-tâches. Comment puis-je résoudre ce problème?

mise à jour: j'ai observé que lorsque je ferme l'application de la tâche-tray, mon application est arrêt forcé dans application manager. Tandis que quand je ferme Whatsapp de tâche-tray, il n'est toujours pas arrêté forcé. Comment est-ce géré par Whatsapp?

52
demandé sur user5377037 2016-09-15 09:58:14

6 réponses

mise à jour 03/2017 - y compris une partie de ma réponse ici .

pour le sujet en ce qui concerne swipe fermé/tué/force arrêtée , ce sujet a été discuté depuis un certain temps et il ne semble pas y avoir de réponse définitive. Pendant un de mes tests, je suis en mesure de encore recevoir un message (testé avec un data - seulement message payload) si je Balayez vers la fermer mon application. Mais quand je force fermé il à partir du menu Paramètres, Je n'a pas été en mesure de recevoir des messages . Notez que c'est pas toujours le comportement.

il y a certains dispositifs qui ont été conçus que lorsque vous swipe close l'application, il sera le même que force d'arrêt eux (voir ma réponse ici ).

Il ya aussi des dispositifs où même si l'application est encore tout simplement swiped away , même si ce n'est pas force fermé , l'appareil lui-même l'empêche de recevoir des messages. D'autres disent que cela ne peut pas être le cas parce que des applications comme WhatsApp ont été capables de le faire. La raison pour laquelle j'ai appris jusqu'à présent pour cela est parce que les fabricants de dispositifs ont liste blanche la plupart des le bien-applications connues pour qu'il soit possible.

cela n'est documenté nulle part parce que (IMO), c'est un sujet qui dépend aussi du dispositif et que FCM n'a pas contrôle total plus.


Réponse Originale:

Puisqu'il est spécifique à l'appareil ( comme vous l'avez mentionné dans votre post: OPPO F1 series phones ), il peut très bien être possible que lorsqu'une application est arrêté du plateau multi-tâches dans cet appareil, il est en fait tuer l'application, provoquant les services et autres processus de fond associés à elle d'être également détruits. Voir ce réponse pour un peu plus d'idée de ce que j'essaie de dire.

si vous cherchez dans la communauté, ce qui est communément suggéré ici est d'utiliser le drapeau START_STICKY . Cependant, j'ai vu qu'il a été précédemment mentionné pour FirebaseMessagingService (voir ce post , commentaire de @ArthurThompson):

ces services seront lancés par Google Play services, qui est toujours en cours d'exécution sur l'appareil. Vous n'avez pas à et ne devriez pas commencer/arrêter ces services vous-même.

cela dit, il y a aussi la possibilité de (Encore des commentaires):

il peut y avoir un réglage sur le dispositif qui permet/désapprouve cela.


je suggère de faire d'autres tests si les services sont tués par le périphérique lui-même ou voir s'il y a des paramètres qui bloquent les notifications.

38
répondu AL. 2017-05-23 12:26:38

avez-vous essayé d'utiliser l'attribut stopWithTask sur votre classe de service?

<service
    android:name="com.yourapp.YourPushService"
    android:stopWithTask="false" />

si réglé à true, ce service avec être arrêté automatiquement lorsque le l'utilisateur de supprimer une tâche enracinée dans une activité appartenant à l'application. Le valeur par défaut est false.

si le drapeau est faux, il y a un appel onTaskRemoved dans votre classe de Service.

Dans le cas où vous pouvez détectez l'événement "swipe", et vous pouvez mettre en œuvre une solution de contournement.

18
répondu danesz 2016-09-23 00:22:11

j'ai vécu la même chose, mais dans mon cas, C'était Les Téléphones Xiaomi au lieu des Téléphones Oppo. Ce qui se passe réellement est que lorsque vous fermez l'application à partir du plateau de système, le système tue l'application entièrement. Cela signifie que votre application ne sera pas en mesure de recevoir des notifications via GCM/FCM. WAKE_LOCK la permission n'aide pas non plus.

cela ne signifie pas que le téléphone ne reçoit pas la notification. Il est. Ça ne laisse pas les applis le montrer. Vous pouvez le vérifier en j'envoie un message de la BAD et je regarde votre logcat.

une solution possible à ce problème est d'utiliser SyncAdapter . Bien qu'il ne soit pas conseillé, j'ai vu certaines applications l'utiliser. D'autres solutions sont à utiliser une sorte de service d'arrière-plan qui est toujours en cours d'exécution. Certaines personnes utilisent aussi AlarmManager car il n'est presque jamais tué. Mon point est - vous ne pouvez pas compter sur GCM / FCM pour vos notifications.

parlons de WhatsApp maintenant -

dans les téléphones de Xiaomi, ils whitelist ou blacklist une application basée sur certains critères. Si vous téléchargez une application et si c'est dans leur liste blanche, ils vont permettre à l'application d'afficher des notifications. Sinon, vous savez déjà ce qui se passe. Mais la bonne chose est que vous pouvez modifier ces paramètres. Recherchez une application de Sécurité nommé. Si vous révoquez les bonnes permissions, même WhatsApp cessera de montrer des notifications.

9
répondu thetanuj 2016-11-22 12:56:47

j'étais également confronté au même problème, mais ensuite j'ai réalisé après beaucoup de débogage que, j'arrêtais les services qui reçoivent les notifications Firebase sur la méthode d'arrêt d'une des activités.

  1. s'il vous plaît vérifier si vous arrêtez ces services n'importe où dans l'application.
  2. assurez-vous que vous utilisez service et non intention-service.
  3. Swiper l'application n'arrêtera jamais les services. Alors essayez de déboguer le app pour les deux premiers point.
4
répondu Mohammed Atif 2016-09-22 10:51:46

la réponse a été trouvée ici

il n'y a aucun moyen d'envoyer un message de données à partir de la console de notification.

mais il existe un autre moyen d'envoyer une notification aux appareils et ils seront attrapés à l'intérieur surmessagereception!

vous avez besoin peut utiliser le terminal (Mac ou Linux) ou un service comme Postman pour envoyer la demande de poste sur ce lien: https://fcm.googleapis.com/fcm/send

avec le corps suivant:

{
    "to": "/topics/your_topic_here",
   "data": {
       "text":"text",
       "text1":"text1",
       ...
   }
}

vous devez aussi ajouter 2 en-têtes:

  1. autorisation-clé=your_server_key_here
  2. Content-Type-application /json

pour obtenir la clé de votre serveur, vous pouvez la trouver dans la console firebase: votre projet - > Paramètres - > Paramètres du projet - > messagerie Cloud - > clé du serveur

enter image description here

enter image description here

1
répondu Andriy Antonov 2017-05-23 12:02:48

quand l'application est fermée, il ferme le service. Vous devez redémarrer le service. Voir ici

-3
répondu mabg 2017-05-23 12:02:48