Comment fonctionnent les notifications push?

25

Je me demande comment fonctionne le système de notifications push?

Existe-t-il une connexion TCP / IP active qui s'exécute en arrière-plan sur les serveurs Google?

opc0de
la source
1
Voir Wikipedia - qui est certes un peu difficile à lire. Fondamentalement et en termes simples: le client se connecte au serveur et demande à être informé - et la réponse vient alors "retardée" lorsque les informations sont disponibles (ou jamais s'il n'y en a pas), qui est ensuite suivie d'un nouvelle requête. Alors oui, cela nécessite une connexion TCP / IP en arrière-plan permanente grignotant votre batterie.
Izzy
@Izzy qui ne peut pas être correct, car (1) les documents disent qu'une intention est créée lorsque le message arrive, et (2) qu'est-ce qui fonctionne sur Android peut garder une connexion ouverte qu'Android ne peut jamais tuer?
Michael
@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 discuter avec vous ici. J'ai entendu dire que les auditeurs (pour les émissions) peuvent être établis de manière dynamique - mais je n'ai jamais entendu cela à propos des intentions (à mon humble avis, elles doivent être déclarées dans le Manifest). Je pourrais bien imaginer un service Google faisant le "vrai travail", et l'application enregistrant simplement un "récepteur". La description ci-dessus était plus "générale", pas spécifique à Android, et j'ai essayé de rester simple;)
Izzy

Réponses:

25

Oui, 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 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 une notification immédiatement 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'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 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.

Dan Hulme
la source
J'ajouterais seulement 1 commentaire: les messages GCM peuvent avoir une taille de 4 Ko, ils ne sont donc pas si limités. developer.android.com/google/gcm/gcm.html
Moszi
Qu'est-ce qui maintient cette connexion ouverte? Toute activité ou service Android peut être supprimé à tout moment.
Michael
1
Merci pour l'info. Selon ma question , savez-vous quelle est l'URL d'une socket ouverte? (URL de la connexion de l'appareil aux serveurs GCM qui est ouverte et utilisée pour les données de notification)
Sabeti
6

Le système d'exploitation Android utilise désormais GCM (Google Cloud Messaging) pour Push Notification WS. Vous pouvez vous faire une meilleure idée ici ; il vous donnera un aperçu architectural du service de notification push complet avec son cycle de vie.

J'espère que cela vous aidera.

Bhavesh
la source
Existe-t-il un moyen de faire une chose similaire sans avoir à compter sur les serveurs de Google?
Michael
@Michael Vous utilisez les services d'Amazon Cloud? Ils semblent avoir un concept comparable. Mais pour le "comment faire", ce n'est pas le bon endroit;)
Izzy
1

Réponse tardive à une vieille question mais mérite d'être posée.

GCM a été déconseillé en avril 2018 et Google a recommandé d'utiliser FCM à la place, ce qui est similaire à GCM.

  1. nous n'avons pas besoin d'écrire notre propre logique de nouvelle tentative d'inscription ou d'abonnement
  2. Vous pouvez utiliser Firebase Notifications, une solution de notifications sans serveur avec une console Web qui permet à quiconque d'envoyer des notifications à des publics spécifiques en fonction des informations de Firebase Analytics.
  3. Il possède l'infrastructure de base de GCM.
  4. Un seul message peut transférer une charge utile allant jusqu'à 4 Ko vers une application cliente.
Ajay Deepak
la source
1
Du point de vue de l'application, FCM n'est pas similaire à GCM, il est identique. FCM n'est que le nouveau nom de GCM.
Robert