Comment fonctionne la technologie de notification push sur Android?

218

Comment Google a-t-il mis en œuvre sa fonction de notification push? Cela fonctionne-t-il grâce à l'interrogation effectuée par un service exécuté en arrière-plan ou d'une manière différente?

Khawar Raza
la source
24
Cela ressemble à une vraie question pour moi. Je me demandais la réponse et Google m'a amené ici. Une fois de plus, une autre question de qualité est close.
Tino Mclaren
1
Je veux aussi savoir cela et je prévoyais d'écrire une question, mais il y a déjà celle-ci, donc c'est certainement une bonne question.
Igor Čordaš

Réponses:

170

D'après ce que j'ai entendu lors d'une conférence des développeurs Android en Israël:

Il y a simplement une socket TCP attente dans le mode accepter sur un serveur Google Cloud. La connexion TCP avait été lancée par l'application Google Play. C'est pourquoi Google Play doit être installé sur l'appareil pour que Google Cloud Messaging (GCM) (anciennement Android Cloud to Device Messaging Service - C2DM ) fonctionne.

Lorsque ce socket client TCP reçoit un message, le message 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 une intention qui est diffusée et finalement reçue par l'application.

Le socket TCP reste ouvert même lorsque l'état radio de l'appareil passe en mode "inactif". Il n'est pas nécessaire que les applications soient en cours d'exécution pour recevoir les intentions.

Plus d'informations sur http://developer.android.com/google/gcm/gcm.html

Tal Kanel
la source
1
Mais je pense que cela fonctionne aussi sur l'émulateur. La chose qui me vient à l'esprit est que l'appareil garde le serveur à jour avec son chemin d'accès actuel (IP). Lorsque le serveur Google doit envoyer une notification, il prend son chemin actuel et transmet le message à ce chemin. Ai-je raison dans une certaine mesure?
Khawar Raza
2
@Khawar Raza: lorsque l'IP de l'appareil a changé pour une raison quelconque, l'appareil se déconnecte du serveur. quand cela se produit - une nouvelle connexion s'établit à la place, en fonction de la nouvelle IP de l'appareil.
Tal Kanel
1
@Khawar Raza: l'émulateur fonctionne même sans Google Play. Je suppose qu'il lance cette prise intégrée en interne, au lieu de Google Play
Tal Kanel
2
Je vois. Ce serait assez intéressant en fait, je me demande si c'est vrai.
you786
2
Il s'agit donc toujours d'un sondage, mais le bon côté est que le sondage est centralisé par Google Play.
Accollativo
143

Android conserve une connexion active aux serveurs de Google, mais il n'utilise pas beaucoup d'énergie ou de données, car aucun trafic n'est envoyé jusqu'à ce que quelque chose envoie un message Google Cloud Messaging (GCM) à une application sur 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 qui utilise GCM n'ajoute 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 examine le message pour déterminer à quelle application il est destiné et démarre cette application. L'application doit être enregistrée auprès d'Android pour utiliser GCM, et elle doit avoir 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 est très limitée, de sorte que l'application peut plutôt ouvrir une connexion normale au serveur tiers pour obtenir plus d'informations (par exemple, télécharger les en-têtes des nouveaux e-mails).

L'avantage de l'utilisation des notifications push est que les applications n'ont pas à s'exécuter à intervalles réguliers pour rechercher de nouvelles données, économisant ainsi de l'énergie et des données. L'avantage d'avoir un mécanisme centralisé comme GCM est que l'appareil n'a besoin que d'une connexion réseau ouverte et que le système Android GCM est la seule chose qui doit continuer à fonctionner, plutôt que chaque application doive continuer à fonctionner en arrière-plan pour conserver son propre réseau connexion à son propre serveur.

Tiré de: Source Voir aussi ici .

Aniket Thakur
la source
1
Juste un commentaire sur la connexion GCM. Cette connexion unique est une connexion d'interrogation.
wmac
1
La partie cruciale pour moi était qu'un serveur tiers, par exemple un serveur de messagerie, envoie vraiment un message de notification aux serveurs Google GCM. Il s'agit d'un service que Google fournit gratuitement et tout tiers de ce type doit mettre en œuvre un canal de communication avec les serveurs Google à l'aide de leur protocole GCN. Soit dit en passant, le protocole est à peu près juste une réponse HTTP au format JSON. Voir developers.google.com/cloud-messaging pour des informations détaillées.
Kyselejsyreček
10

Vous pouvez implémenter la notification push sur Android vous-même avec une longue connexion TCP de polling. Mais cela impliquerait de maintenir une prise supplémentaire => décharge de la batterie. Ou vous pouvez ouvrir une connexion à intervalles réguliers à l'aide du gestionnaire d'alarmes.

Google ouvre probablement un socket pour toutes les notifications push C2DM, d'où sa batterie plus efficace.

Shreesh
la source
il est donc confirmé que le client interroge le long d'une connexion TCP, non? savez-vous à quelle fréquence il interroge les données? est-ce toutes les 5 secondes par exemple. ou est-ce rapide comme un battement de coeur?
j2emanue
3

Depuis le 10 avril 2018, Google a déprécié 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.

https://firebase.google.com/docs/cloud-messaging/

user1767754
la source
1

Oui tu as raison. Google avait un service (GTalk Service) et ce service a demandé aux serveurs de Google dans certaines périodes de temps.

Yury
la source
Je ne sais pas. Je viens de lire comment C2DM fonctionnait. Maintenant, quelque chose peut changer.
Yury
-3

Sur les appareils Android, lorsque vous recevez des notifications push, l'image de l'application expéditeur et un message apparaissent dans la barre d'état. Exactement lorsque le client appuie sur la notification, il atterrit sur la demande.

Robert Manus
la source
c'est une connexion TCP longue durée en arrière-plan, cela n'est pas expliqué dans la réponse, veuillez vous en tenir à ce que la question demande :)
Nishchal Gautam