web-dev-qa-db-fra.com

Est-ce que Android prend en charge la notification Push en temps quasi réel?

J'ai récemment appris que les applications iPhone pouvaient recevoir des messages presque instantanément notifications aux applications notifications aux applications .

Ceci est fourni sous la forme de notifications Push, un protocole sur mesure qui garde une connexion de données toujours connectée à l'iPhone et des paquets binaires de messages à l'application, qui affiche des alertes incroyablement rapidement, entre 0,5 et 5 secondes à compter de l'envoi de l'application du serveur au temps de réponse de l'application du téléphone. Ceci est envoyé sous forme de données - plutôt que SMS - dans de très très petits paquets chargés dans le cadre du plan de données et non sous forme de messages entrants.

J'aimerais savoir s'il existe une installation similaire avec Android ou s'il est possible d'implémenter quelque chose de similaire avec des API Android. Pour clarifier, je définis similaire à:

  • Pas un message SMS, mais une solution pilotée par les données
  • En temps réel autant que possible
  • Est évolutif, c’est-à-dire qu’en tant que partie serveur d’une application mobile, je pourrais notifier des milliers d’instances d’application en quelques secondes

J'apprécie que l'application puisse être basée sur une extraction, un style de requête/réponse HTTP, mais idéalement, je ne souhaite pas interroger de manière aussi intensive simplement pour vérifier la notification; à part cela, c'est comme si le drainage des données se faisait au compte-gouttes.

331
j pimmel

Firebase Cloud Messaging FAQ FCM est la nouvelle version de GCM. Il hérite de l’infrastructure principale de GCM pour transmettre des messages de manière fiable sur Android, iOS et Chrome. Cependant, ils continueront à prendre en charge GCM car de nombreux développeurs utilisent aujourd'hui les SDK de GCM pour gérer les notifications, et la mise à niveau des applications client prend du temps.

À compter du 26 juin 2012, Google Cloud Messaging est le moyen préféré pour envoyer des messages aux applications qui s'exécutent sur des appareils.

Auparavant (et maintenant obsolète), le service s'appelait Cloud To Device Messaging .

211
j pimmel

XMPP est une bonne solution. Je l'ai utilisé pour une application Android activée en mode Push. XMPP est puissant, hautement extensible et facile à intégrer et à utiliser.

Il existe une multitude de serveurs XMPP gratuits (même si vous ne devez pas en abuser par courtoisie) et il existe des serveurs open source que vous pouvez exécuter sur l'un de vos propres ordinateurs. OpenFire est un excellent choix.

La bibliothèque que vous voulez n'est pas Smack comme indiqué ci-dessus, c'est aSmack . Mais notez que ceci est un environnement de construction - vous devrez construire la bibliothèque.

Voici un calcul que j'ai effectué sur l'impact d'une solution XMPP sur l'autonomie de la batterie:

Le client Android doit maintenir une connexion persistante TCP en se réveillant périodiquement pour envoyer une pulsation au serveur XMPP.
Cela impose clairement un coût en termes d’utilisation de l’énergie. Une estimation de ce coût est fournie ci-dessous:

  • Utilisation d'une batterie de 1400 mAh (fournie avec le Nexus One et le HTC Desire)
  • Un appareil en veille, connecté à un réseau 3G, utilise environ 5 mA
  • Le cycle de réveil, battement de coeur et sommeil se produit toutes les 5 minutes, dure trois secondes et utilise 300 mA
  • Le coût d'utilisation de la batterie par heure est donc de:
    • 36 secondes 300mA = 3mAh envoi du battement de coeur
    • 3600 secondes 5mA = 5mAh au ralenti
    • 4:95 + 3 = 7: 95mAh combinés
  • Une batterie de 1400mAh dure environ 11,6 jours au ralenti et 7,3 jours lors de l'exécution de l'application, ce qui représente une réduction d'environ 37% de la durée de vie de la batterie.
  • Cependant, une réduction de 37% de la durée de vie de la batterie représente le pire des cas, car les appareils sont rarement complètement inactifs.
46
flesh

J'ai récemment commencé à jouer avec MQTT http://mqtt.org pour Android comme moyen de faire ce que vous demandez (c'est-à-dire non pas SMS mais données pilotées, remise de messages presque immédiate, évolutive, non interrogation, etc.)

J'ai un article de blog avec des informations générales à ce sujet au cas où cela serait utile http://dalelane.co.uk/blog/?p=938

(Remarque: MQTT est une technologie IBM et je dois préciser que je travaille pour IBM.)

32
dalelane

Regardez la plate-forme Xtify . On dirait que c'est ce qu'ils font,

13
peter

Google déprécie C2DM, mais à la place de leur introduction GCM (Google Cloud Messaging), je ne pense pas à leur quota et à sa gratuité! Cela nécessite Android 2.2+! http://developer.Android.com/guide/google/gcm/index.html

12
William L.

Un nouvel effort open-source vise à développer une bibliothèque Java pour les notifications Push sur Android, en utilisant le serveur Meteor Comet en tant que serveur principal. Vous pouvez le vérifier à le blog du projet Deacon . Nous avons besoin de développeurs, alors s'il vous plaît, passez le mot!

8
mtbkrdave

Si vous pouvez compter sur les bibliothèques Google présentes sur votre marché cible, vous voudrez peut-être greffer la fonctionnalité GTalk (enregistrement d'une ressource sur le serveur existant). nom d'utilisateur - l'intercepter les messages quand ils arrivent avec un BroadcastReceiver).

Si ce n'est pas le cas, et j'attends vous ne pouvez pas , alors vous êtes en train de regrouper vos propres versions de XMPP . C’est un problème, mais peut être facilité si XMPP est fourni séparément en tant que bibliothèque autonome.

Vous pouvez également considérer PubSubHubub , mais je n’ai aucune idée de l’utilisation qui en est faite par le réseau. Je crois qu'il est construit au sommet de XMPP.

8
jamesh

Je me suis penché sur la question et PubSubHubBub recommandé par Jamesh n’est pas une option. PubSubHubBub est destiné aux communications entre serveurs.

"Je suis derrière un NAT. Puis-je m'abonner à un hub? Le hub ne peut pas se connecter à moi."

/Anonyme

Non, PSHB est un protocole de serveur à serveur. Si vous êtes derrière le NAT, vous n'êtes pas vraiment un serveur. Bien que nous ayons discuté des possibilités d'extensions PSHB facultatives pour suspendre l'obtention ("longue interrogation") et/ou l'interrogation de la boîte de message pour ces clients, elles ne font pas partie des spécifications de base. La spécification principale est uniquement de serveur à serveur.

/ Brad Fitzpatrick, San Francisco, Californie

Source: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (lien direct impossible)

Je suis arrivé à la conclusion que la méthode la plus simple consiste à utiliser Comet HTTP Push. C'est une solution à la fois simple et bien comprise, mais elle peut également être réutilisée pour les applications Web.

8

J'ai récemment développé http://pushdroid.org c'est une application unique qui devrait être installée sur le téléphone, tout comme Google l'a mise en œuvre dans la version 2.2. Elle fonctionne à partir de la version 1.5 et diffuse via l'intention.

6
Stefan

Je ne trouve pas où je l'ai lu, mais je pense que gmail utilise une connexion ouverte TCP pour effectuer la diffusion du courrier électronique.

6
Will

Google a récemment (18mai2016) annoncé que Firebase est maintenant une plate-forme unifiée pour les développeurs mobiles, y compris les notifications Push en temps quasi réel.Il est également multi-plateforme:

La société propose désormais à tous les utilisateurs de Firebase des notifications gratuites et illimitées, avec prise en charge d’iOS, Android et du Web.

source

6
Freek Nortier

Pourquoi ne pas aller avec la mise en œuvre XMPP. à l'heure actuelle, de nombreux serveurs publics sont disponibles, y compris gtalk, Jabber, Citadel, etc. Pour Android, il existe un SDK nommé SMACK. Nous ne pouvons pas dire une notification Push, mais en utilisant le protocole XMPP, vous pouvez maintenir une connexion ouverte entre le client et le serveur, ce qui permettra une communication dans les deux sens. Signifie que Android le client et le serveur peuvent tous deux communiquer l'un avec l'autre. À l'heure actuelle, cela répondra au besoin de Push in Android. J'ai implémenté un exemple de code et cela fonctionne vraiment bien

6
Rahul Patel

Comme GTalk n'est plus dans le SDK, il peut être judicieux de créer un système de messagerie Push 'standard'. De cette façon, un seul service doit être exécuté, une seule connexion TCP supplémentaire doit être ouverte. Les applications doivent communiquer avec ce service à l'aide de Intents et doivent d'abord demander l'autorisation d'envoyer et de recevoir une notification du service. Le service doit alors informer l'utilisateur qu'une nouvelle application veut envoyer et recevoir des messages. L'utilisateur accordera ou refusera ensuite l'autorisation, afin qu'il conserve le contrôle. L'application enregistre ensuite une catégorie d'action + dans le service afin que celui-ci sache transmettre le message transmis.

Est-ce une bonne idée ou pas?

6
MrSnowflake

Le problème avec GCM est qu’il ya beaucoup de configuration impliquée dans le processus:

  • Vous devez ajouter beaucoup de passe-partout pour vous Android app
  • Vous devez configurer un serveur externe pour communiquer avec le serveur GCM.
  • Vous devrez écrire des tests

Si vous aimez les choses simples (comme moi), vous devriez essayer rbanAirship . C'est (IMHO) le moyen le plus simple d'utiliser GCM dans votre application sans faire beaucoup de configuration. Il vous fournit également une jolie interface graphique pour vérifier que vos messages GCM sont correctement remis.

  • Vous pouvez trouver la documentation et le guide de démarrage ici
  • Vous pouvez trouver un exemple d'application ici

Remarque: je ne suis aucunement associé à UrbanAirship.

4
fernandohur
2
Pooja Roy

Ils ont leurs auditeurs qui doivent être utilisés par vous en utilisant leurs classes de bibliothèque dans votre code. Vous n'avez pas besoin de vous soucier de pousser. Vous devez envoyer le message au serveur. Le serveur transmettra le message à l'appareil. Ils utilisent OAuth. En ce qui concerne les protocoles, il existe deux méthodes utilisant CCS et XMPP. CCS utilise simplement XMPP en tant que couche de transport authentifiée. Vous pouvez donc utiliser la plupart des bibliothèques XMPP pour gérer la connexion. Pour envoyer des notifications à l'appareil, vous pouvez écrire du code dans l'application Android à envoyer ainsi que le code de votre serveur. l'envoi du message se fera uniquement par votre code. Le reste sera pris en charge par Google Server en cas GCM. Vous pouvez vérifier les détails à ce lien

http://developer.Android.com/google/gcm/server.html

Aussi, pour des problèmes de sécurité

sécurité de la messagerie en nuage Google https://groups.google.com/forum/#!topic/Android-gcm/M-EevBitbhQ

Si votre application ne fonctionne pas, les appareils peuvent également recevoir une notification, car vous devez écrire du code pour les écouteurs de diffusion. En arrière-plan, il écoute le serveur et chaque fois qu'un paquet de message est là, il reçoit le message comme notification. Android a un service dont vous ne devez pas vous soucier. Il vous suffit d'utiliser ces ressources à l'aide de la classe library qui facilite votre travail et de les laisser écrire si votre application n'est pas en cours d'exécution, elle reçoit également une notification. Évidemment, il y aurait un auditeur qui ferait que l'application soit reçue.Check la section "Recevez le message" dans ce lien

http://developer.Android.com/google/gcm/client.html

Il acceptera également la demande des utilisateurs. Pour GCM, ça ira. Veuillez cocher "Envoyer un message"

http://developer.Android.com/google/gcm/client.html

2
ajitksharma