Je me demande comment fonctionne le système de notifications push ?
Y a-t-il une connexion TCP/IP active qui fonctionne en arrière-plan avec les serveurs de Google ?
Je me demande comment fonctionne le système de notifications push ?
Y a-t-il une connexion TCP/IP active qui fonctionne en arrière-plan avec les serveurs de Google ?
Oui, Android maintient une connexion active avec les serveurs de Google, mais elle ne consomme pas beaucoup d'énergie ou de données, car aucun trafic n'est envoyé par cette connexion jusqu'à ce qu'un message GCM soit envoyé à 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 la GCM n'ajoute pas de charge supplémentaire.
La première étape du GCM est qu'un serveur tiers (tel qu'un serveur de messagerie) envoie une requête 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 lance cette application. L'application doit s'être enregistrée auprès d'Android pour pouvoir utiliser GCM et doit disposer des autorisations nécessaires. 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, l'application peut 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 besoin de fonctionner à intervalles réguliers pour vérifier les nouvelles données, ce qui permet d'économiser de l'énergie et des données. L'avantage d'un mécanisme centralisé comme GCM est que l'appareil n'a besoin que d'une seule connexion réseau ouverte et que le système GCM d'Android est la seule chose qui doit continuer à fonctionner, plutôt que chaque application qui doit rester en arrière-plan pour maintenir sa propre connexion réseau à son propre serveur.
Je n'ajouterais qu'un seul commentaire : Les messages GCM peuvent avoir une taille de 4KByte, ils ne sont donc pas si limités. developer.Android.com/google/gcm/gcm.html
Qu'est-ce qui maintient cette connexion ouverte ? Toute activité ou service Android peut être tué à tout moment.
Merci pour l'information. D'après ma question Savez-vous quelle est l'URL d'un socket ouvert (URL de la connexion entre le dispositif et les serveurs GCM qui est ouverte et utilisée pour les données de notification) ?
Android OS utilise désormais GCM (Google Cloud Messaging) pour les notifications push WS. Vous pouvez vous faire une idée plus précise ici Il vous donnera une vue d'ensemble de l'architecture du service complet de notification par poussée et de son cycle de vie.
J'espère que cela vous aidera.
Réponse tardive à une vieille question mais qui vaut la peine d'être posée.
GCM a été déprécié en avril 2018 et google a recommandé d'utiliser FCM à la place qui est similaire à GCM.
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.
1 votes
Voir Wikipedia -- qui, il est vrai, est un peu difficile à lire. En gros, et en mots faciles : Le client se connecte au serveur et demande à être informé -- et la réponse arrive alors "en différé" lorsque l'information est disponible (ou jamais s'il n'y en a pas), qui est alors suivie d'une nouvelle demande. Donc oui, cela nécessite une connexion TCP/IP permanente en arrière-plan qui grignote votre batterie.
0 votes
@Izzy cela ne peut pas être vrai, parce que (1) la documentation dit qu'un Intent est créé lorsque le message arrive, et (2) qu'est-ce qui fonctionne sur Android peut garder une connexion ouverte qu'Android ne peut jamais tuer ?
0 votes
@Michael Quels documents ? Je ne suis pas un programmeur Android pour en comprendre la profondeur (et ce n'est pas un forum de discussion), donc je ne peux probablement pas argumenter avec vous ici. J'ai entendu dire que auditeurs (pour les diffusions) peut être établi dynamiquement - mais je n'ai jamais entendu cela à propos de intents (IMHO ils doivent être déclaré dans le
Manifest
). Je pourrais très bien imaginer qu'un service Google fasse le "vrai travail", et que l'application enregistre simplement un "récepteur". La description ci-dessus était plus "générale", pas spécifique à Android, et j'ai essayé de la garder simple ;)