Comment Google a-t-il mis en œuvre sa fonctionnalité de notification Push? Est-ce que cela fonctionne grâce à une interrogation effectuée par un service exécuté en arrière-plan ou d'une manière différente?
D'après ce que j'ai entendu lors d'une conférence de développeurs Android en Israël:
Un socket TCP attend tout simplement mode d'acceptation sur un serveur Google en nuage. La connexion TCP a été initiée par l'application Google Play. C'est pourquoi Google Play doit être installé sur l'appareil pour que service de messagerie en nuage Google (GCM) (anciennement Android service de messagerie de périphérique à périphérique - C2DM ) fonctionne. .
Lorsque ce socket client TCP reçoit un message, celui-ci contient des informations telles que le nom du package de l'application à laquelle il doit être adressé et, bien sûr, les données elles-mêmes. Ces données sont analysées et regroupées dans un intention qui est diffusé et éventuellement reçu par l'application.
Le socket TCP reste ouvert même lorsque l'état radio du périphérique passe en mode "inactif". Les applications ne doivent pas nécessairement être en cours d'exécution pour recevoir les intentions.
Plus d'informations sur http://developer.Android.com/google/gcm/gcm.html
Android conserve une connexion active aux serveurs de Google, mais n'utilise pas beaucoup d'énergie ni de données, car aucun trafic ne lui est envoyé jusqu'à ce que quelque chose envoie un message Google Cloud Messaging (GCM) à une application de votre téléphone. Il n'y a qu'une seule connexion sur le téléphone, utilisée par toutes les applications: l'installation d'une nouvelle application utilisant GCM n'entraîne aucune charge supplémentaire.
La première étape de GCM est qu'un serveur tiers (tel qu'un serveur de messagerie) envoie une demande au serveur GCM de Google. Ce serveur envoie ensuite le message à votre appareil, via cette connexion ouverte. Le système Android consulte le message pour déterminer l'application à laquelle il est destiné, puis lance l'application. L'application doit être enregistrée auprès de Android pour utiliser GCM, et elle doit disposer de l'autorisation appropriée. Lorsque l'application démarre, elle peut créer immédiatement une notification avec les données du message. La taille des messages GCM étant très limitée, il est donc possible que l'application ouvre une connexion normale au serveur tiers pour obtenir plus d'informations (par exemple, le téléchargement des en-têtes de nouveaux courriels).
L'avantage d'utiliser les notifications Push est que les applications ne doivent pas s'exécuter à intervalles réguliers pour rechercher de nouvelles données, ce qui permet d'économiser de l'énergie et des données. L’avantage d’avoir un mécanisme centralisé tel que GCM est que l’appareil n’a besoin que d’une seule connexion réseau ouverte et que le système Android GCM est la seule chose qui doit continuer à fonctionner, plutôt que chaque application doit continuer à fonctionner contexte de garder sa propre connexion réseau à son propre serveur.
Vous pouvez implémenter vous-même la notification Push sur Android avec une longue connexion TCP. Mais cela impliquerait de maintenir une prise supplémentaire => batterie épuisée. Ou vous pouvez ouvrir une connexion à intervalles réguliers en utilisant Alarm Manager.
Google ouvre probablement un socket pour toutes les notifications Push C2DM, d'où une efficacité accrue de la batterie.
À compter du 10 avril 2018, Google a déconseillé d'utiliser GCM. Les API client et serveur GCM sont obsolètes et seront supprimées dès le 11 avril 2019. Migrez les applications GCM vers Firebase Cloud Messaging (FCM), qui hérite de l'infrastructure GCM fiable et évolutive, ainsi que de nombreuses nouvelles fonctionnalités.
Oui tu as raison. Google avait un service (GTalk Service) et ce service demandait aux serveurs de Google à certaines périodes.