32 votes

Comment les applications qui ne fonctionnent pas "en arrière-plan" reçoivent-elles des notifications ?

Donc, Android a cette vue (je pense que la gauche du bouton d'accueil est standard) où vous voyez toutes les applications "actuellement ouvertes", quoi que cela signifie exactement. Ce que je me demande, c'est comment les applications qui ne font pas partie des applications "en cours" peuvent recevoir des notifications ? Par exemple, Whatsapp, Reddit ou Email enverront toujours des alertes même sur un smartphone fraîchement redémarré où je n'ai certainement pas lancé l'application manuellement.

Comment cela fonctionne-t-il exactement ? Est-ce que, dans un sens, toutes les applications installées tournent en permanence en arrière-plan et demandent à intervalles réguliers à leur serveur d'origine s'il y a eu une notification ? La notification est-elle envoyée d'une manière ou d'une autre au système Android lui-même, qui à son tour active l'application demandée à la demande ? Au moins sur un PC, je m'attendrais à ce qu'un programme soit en cours d'exécution afin d'envoyer des alertes, mais peut-être qu'Android est complètement différent ?

4 votes

2 votes

Lorsque vous installez une application, il est possible que vous installiez plus que l'"application" que vous voyez à l'écran. Ces applications peuvent également installer des services qui tournent en arrière-plan, qu'ils soient ou non visibles dans les "applications précédentes". Notez également que ces "applications précédentes" ne sont pas réellement en cours d'exécution lorsque vous les regardez dans cette vue - elles sont suspendues et ne reviennent à la vie que lorsque vous les ramenez au premier plan.

1 votes

Par exemple, une application comme Life 360 que vous n'avez jamais besoin d'ouvrir lorsque vous démarrez votre téléphone, vérifie de temps en temps votre position et la transmet au serveur sur l'internet. L'application Life360 elle-même n'est pas en cours d'exécution, mais le service qu'elle a installé l'est.

49voto

pr0nin Points 353

Les notifications de Whatsapp et Reddit sont déclenchées par des notifications push envoyées par les serveurs de Google, reçues par Google Play Services, une application système qui fonctionne toujours en arrière-plan. Toutes les notifications Google Push (ou, comme on les appelle aujourd'hui, les notifications "Firebase Cloud Messaging") sont reçues et traitées initialement par les services Google Play.

L'étape suivante du traitement de la notification push reçue dépend du type de notification push. Les notifications en texte brut peuvent être affichées directement sans même lancer l'application qu'elles ciblent. Les autres notifications push sont transmises à l'application à laquelle elles appartiennent (qui est automatiquement lancée si elle n'est pas déjà en cours d'exécution) et l'application peut alors "traduire" le message push en une notification (dans le cas de Whatsapp, cela nécessite par exemple le décryptage du message reçu, voire la récupération de données supplémentaires sur les serveurs de Whatsapp).

0 votes

Merci beaucoup, c'est clair comme de l'eau de roche. Une question cependant, cela ne veut pas dire que TOUTES les données qui atteignent mon téléphone passent par les services de Google, n'est-ce pas ? (Je pense, par exemple, aux données des pages que j'ai consultées sur Wikipédia avec l'application mobile Firefox). Je pense qu'il s'agit uniquement du type de notification ?

6 votes

@MaxD Non, seules les notifications push de Google sont traitées par Google Play Services. En général, les applications récupèrent directement les données des serveurs web. Mais même pour les notifications push, les applications peuvent contourner ce service et implémenter leur propre système de messages push - par exemple, Signal a cette fonctionnalité en option ou pour les appareils qui n'incluent pas les services Google (par exemple, ROM personnalisée ou appareils Huawei). Mais cela coûte plus cher en données de batterie.

2 votes

@MaxD Au cas où vous souhaiteriez chercher plus de détails sur Google, le système actuel qui gère cela s'appelle Firebase et il peut traiter deux types de messages : les "notifications" (quelque chose qui est traité directement sans impliquer l'application, donc Google peut le voir aussi) et les messages de "données" livrés à une application pour un traitement ultérieur. De nombreuses applications utilisent le chiffrement pour les messages de "données", de sorte que Google peut uniquement voir que le serveur de l'application vient de vous envoyer quelque chose, et non ce que c'était.

13voto

Chthonic One Points 221

Je sais qu'il existe déjà une bonne réponse à cette question, mais je pense qu'il pourrait également y avoir une réponse technique détaillée.

Lorsque vous installez sur votre téléphone une nouvelle application qui utilise les notifications push, et que vous lui donnez la permission d'accéder à l'internet, elle enregistre l'intérêt de son site web de service push auprès du service de notification push de Google sur votre téléphone.

Le service Google Push enregistrera ensuite l'intérêt pour les mises à jour auprès du serveur de notification push de l'application via des Web Sockets. Cela se produira aussi automatiquement lorsque vous allumerez votre téléphone après l'installation de l'application.

Lorsqu'une mise à jour se produit, le message est transmis du serveur de notification push au service Google Push. Il est ensuite transmis à l'application intéressée, qui se réveille si elle est endormie, ou qui charge son code de surveillance push s'il n'est pas chargé pour charger la notification et vous avertir du message.

Lorsque vous allumez votre téléphone et qu'il enregistre des intérêts en une seule fois, vous risquez de recevoir une avalanche de notifications push. Il s'agit de toutes les notifications depuis la dernière fois que l'application a notifié le serveur au moment où vous les lisez. Cela se fait de manière standard dans les Web Sockets pour vous mettre à jour dans ce pour quoi vous avez déclaré votre intérêt.

Certaines applications peuvent disposer d'un serveur qui envoie un message push générique à l'application Google Push pour qu'elle réveille l'application réelle, qui récupère alors le véritable message push. Ce n'est pas le cas de tous les services. Cela est fait pour des raisons de sécurité et de confidentialité.

La raison pour laquelle le service de notification push de Google est utilisé comme intermédiaire est simplement le fait qu'il est toujours en cours d'exécution, contrairement à presque toutes les autres applications de votre téléphone. Il sera toujours là pour recevoir une notification push. Bien que vous puissiez le contourner, vous risquez de manquer des notifications si votre application n'est pas en cours d'exécution lorsqu'elles arrivent.

2 votes

Que se passe-t-il si l'on souhaite utiliser un appareil sans Google ?

0 votes

@irfan chaque téléphone intelligent a sa propre version de Google Play Services. Apple a le sien et même Google Firebase est capable de cibler les applications iOS. firebase.google.com/docs/cloud-messaging/ios/client

1 votes

@DeanMeehan Google Firebase sur iOS utilise simplement Apple push en arrière-plan. Cela peut même être imposé par Apple.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X