Je développe une application de chat pour Android. Je lis depuis des semaines sur XMPP et Google Cloud Messaging (et Firebase Cloud Messaging) et je suis encore très confus.
Actuellement, j'ai déjà configuré un serveur XMPP localement (Ejabberd) et connecté avec succès mon application Android à celui-ci à l'aide de la bibliothèque Smack.
À ma connaissance, je dois utiliser GCM ou le nouveau FCM pour les notifications Push. J'ai donc déjà créé un projet dans Google Cloud Platform. Mon application Android peut également s'y connecter à l'aide de la bibliothèque Smack (au lieu de se connecter directement à mon serveur XMPP). Sur mon serveur, j'ai une petite application Java qui se connecte à GCM à l'aide de la bibliothèque Smack.
Tout va bien jusqu'à ici. Ma grande confusion est la suivante: Comment utiliser mon serveur XMPP avec GCM for Push Notifications? Chaque documentation, exemples, guides, tutoriels que j'ai trouvés pour les implémentations côté serveur me disent simplement comment me connecter à GCM, mais aucun ne me dit comment utiliser mon serveur XMPP avec GCM. Qu'est-ce qui me manque? Mon application Java se connecte simplement à GCM, reçoit et envoie des messages de et vers GCM, mais mon serveur XMPP reste à ne rien faire. En réalité, mon application Android et mon application Java serveur utilisent exclusivement GCM, pas mon serveur XMPP.
J'espère que quelqu'un pourra m'aider à comprendre cela dans son ensemble, il me manque évidemment quelques éléments clés pour réaliser cette mise en œuvre.
Vous devez combiner Ejabberd et FCM, c'est comme ça que toutes les grandes applications de chat le font. Pour les bases, il y a 3 composants: App Server connecté via XMPP à FCM, Ejabberd et votre application client.
C’est la description de base de l’architecture que vous devriez avoir pour réaliser ce que vous voulez.
Vous devez configurer un serveur Java qui se connecte à FCM (anciennement GCM). Vous pouvez ensuite, depuis votre périphérique, envoyer un message en amont à FCM, qui l'envoie ensuite à votre serveur Java. Ce dernier peut également gérer ce message en amont afin d'envoyer un message en aval aux périphériques ciblés. Ensuite, côté périphérique, vous pouvez gérer les messages en aval reçus pour donner une notification Push.
Quelques liens utiles:
Comment envoyer un message en amont:
https://firebase.google.com/docs/cloud-messaging/upstream#sample-send
Comment recevoir et gérer les messages en aval:
https://firebase.google.com/docs/cloud-messaging/downstream#sample-receive
Comment ai-je configuré un exemple de serveur Java:
https://stackoverflow.com/a/38170310/4433653
Ceci est un exemple de projet Java destiné à présenter le serveur de connexion XMPP Firebase Cloud Messaging (FCM). Ce projet est un serveur autonome très simple que j'ai développé comme base d'un projet plus vaste. C'est un serveur d'applications que nous devons implémenter dans notre environnement. Ce serveur envoie des données à une application cliente via le serveur FCM CCS à l’aide du protocole XMPP.
https://github.com/carlosCharz/fcmxmppserver
Et aussi j'ai créé une vidéo sur youtube où j'explique ce qu'elle fait.
https://www.youtube.com/watch?v=PA91bVq5sHw
J'espère que vous le trouverez utile.
Je crée également une application de discussion sur Android avec Smack v.4.1.8, la dernière version de Smack, et notre serveur utilise ejabberd. Je n'utilise aucun tiers comme GCM ou Firebase pour envoyer un message en aval d'un utilisateur à un autre. Si je ne me trompe pas, vous allez utiliser GCM ou Firebase pour envoyer un message à un autre utilisateur, si oui, ne le faites pas.
Pourquoi? Le protocole TCP continue d'écouter un écouteur d'invocation que vous avez enregistré dans App lorsque la connexion est établie et toujours connectée. Smack a un auditeur qui s'appelle "addAsyncStanzaListener ()"
addAsyncStanzaListener est utilisé pour écouter un paquet de réception dans App. Ils ont
public void processPacket(Stanza packet)
Vous pouvez l'invoquer et vous écouterez le paquet au fil du temps.
Je fais une recherche sur le maintien d'une connexion stable de Smack. La plupart des smartphones Android ont chaque configuration, et restriction. Nous ne pouvons pas tester tous les périphériques . Voici mes conseils pour maintenir la connexion stable:
Et c'est tout. Toutes les demandes, juste commentez ci-dessous :)
Meilleur regard R Aditya Gumay
Votre suggestion est valable pour une connexion avec TCP/IP jamais abandonnée. ce qui n'est pas le cas dans le réseau mobile 3G/4G. Donc, dans un vrai réseau 3G/4G, le client mobile/APP peut être en état de zombie (déconnecté) . C'est pourquoi vous avez besoin de Firebase/FCM pour pouvoir jouer.