Application de chat pour Android utilisant un serveur XMPP et Google Cloud Messaging (ou la nouvelle messagerie Cloud Firebase) pour les notifications Push

Je développe une application de chat pour Android. Je lis depuis des semaines sur XMPP et Google Cloud Messaging (et la messagerie Cloud Firebase) et je suis toujours très confus.

Actuellement, j'ai déjà configuré un serveur XMPP localement (Ejabberd) et j'ai bien connecté ma application Android à l'aide de la bibliothèque Smack.

  • Layout_gravity dans LinearLayout
  • Installation du SDK d'Android sous Windows 7 Pro 64 bit
  • Obtenir un élément sélectionné à l'aide de Checkbox dans Listview
  • Structure du répertoire de projet de test Android lors de l'utilisation d'Eclipse
  • Comment un bouton peut-il se concentrer?
  • Préférences de numéro dans l'activité préférée dans Android
  • À ma connaissance, j'ai besoin d'utiliser GCM ou la nouvelle FCM pour les notifications push, donc j'ai déjà créé un projet dans Google Cloud Platform. Mon application Android peut se connecter à la bibliothèque Smack aussi (au lieu de se connecter directement à mon serveur XMPP). Dans 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: Comment puis-je utiliser mon serveur XMPP avec GCM pour les notifications push? Chaque documentation, exemples, guides, tutoriels que j'ai trouvés pour les implémentations côté serveur me disent simplement comment se connecter à GCM mais aucun ne me dit comment utiliser mon serveur XMPP en conjonction avec GCM. Qu'est-ce qui me manque? Mon application Java se connecte juste à GCM, reçoit et envoie des messages depuis et vers GCM, mais mon serveur XMPP est simplement assis là, sans rien faire. En fait, mon application Android et l'application Java du serveur utilisent uniquement le GCM, pas mon serveur XMPP.

    J'espère que quelqu'un peut m'aider à comprendre cela dans son ensemble, il me manque évidemment des éléments clés pour réaliser cette implémentation.

  • Existe-t-il un bon IDE en ligne pour le développement d'Android?
  • Java.lang.IllegalStateException: Fragment non attaché à l'activité
  • Comment puis-je utiliser les services Google Play dans un projet maven?
  • Comment puis-je connecter Lenovo IdeaPad S6000 à Windows 7 (64 bits)
  • Utilisation de jarres qui utilisent des classes java.beans (Introspector, BeanInfo ou PropertyDescriptor)
  • Développer un lecteur vidéo sur Android pour supporter HLS
  • 4 Solutions collect form web for “Application de chat pour Android utilisant un serveur XMPP et Google Cloud Messaging (ou la nouvelle messagerie Cloud Firebase) pour les notifications Push”

    Vous devez mélanger ensemble Ejabberd et FCM, c'est ainsi que toutes les grandes applications de discussion le font. Pour les bases, il existe 3 composants: le serveur d'application connecté via XMPP à FCM, à Ejabberd et à votre application client.

    1. Lorsque l'application est au premier plan, vous utilisez la bibliothèque Smack pour vous connecter directement à votre serveur Ejabberd, envoyer des messages, modifier la présence de l'utilisateur, etc. La connexion à votre Ejabberd est conservée pendant cette période . Vous n'émettez pas de messages en amont pendant cette période!
    2. Une fois que l'utilisateur navigue loin de votre application, vous fermez la connexion . L'utilisateur est maintenant considéré comme «Away» ou «Offline».
    3. À partir de ce moment, votre App Server communique avec FCM pour envoyer des messages en aval au périphérique en utilisant également la bibliothèque Smack.
    4. Sur l'appareil client: vous gérez le message entrant et affichez une notification. Avec Android N, les utilisateurs peuvent répondre directement à partir de la notification. Je suppose que, dans ce cas, vous utiliserez FCM pour envoyer un message en amont au serveur de votre application car pendant ce temps, il n'y a pas de connexion active à votre serveur Ejabberd.
    5. Une fois que l'utilisateur tape sur la notification, l'application revient au premier plan et vous vous connectez à Ejabberd et revenez à l'étape 1.

    C'est la description très basique de l'architecture que vous devriez avoir pour atteindre ce que vous voulez.

    Vous devez configurer un serveur Java qui se connecte à FCM (anciennement GCM). Ensuite, vous pouvez envoyer un message en amont à FCM qui envoie ce message en amont à votre serveur java, puis, dans ce serveur Java, vous pouvez gérer ce message en amont pour envoyer un message en aval vers le (s) périphérique (s) ciblé (s). Ensuite, du côté de l'appareil, 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 j'ai configuré un exemple de serveur Java:
    https://stackoverflow.com/a/38170310/4433653

    Il s'agit d'un exemple de projet java pour mettre en évidence 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 mettre en œuvre dans notre environnement. Ce serveur envoie des données à une application client via le serveur FCM CCS en utilisant le protocole XMPP.

    https://github.com/carlosCharz/fcmxmppserver

    Et j'ai également créé une vidéo dans youtube où j'explique ce qu'elle fait.

    https://www.youtube.com/watch?v=PA91bVq5sHw

    J'espère que cela vous est utile.

    Je crée également une application de chat dans Android avec Smack v.4.1.8 dont la dernière version de Smack et notre serveur utilisent ejabberd. Je n'utilise pas de tiers comme GCM ou Firebase pour envoyer un message en aval du message utilisateur vers l'utilisateur. Si je ne me trompe pas, vous allez utiliser GCM ou Firebase pour envoyer les messages utilisateur aux utilisateurs, si oui, ne faites pas cela.

    Pourquoi? Le protocole TCP continue d'écouter un appelant appelant que vous avez enregistré dans l'application lorsque la connexion est établie et toujours connectée. Smack a un auditeur appelé "addAsyncStanzaListener ()"

    AddAsyncStanzaListener est utilisé pour écouter un paquet de réception dans l'application. Ils ont

      public void processPacket(Stanza packet) 

    Vous pouvez l'inviter, et vous écouterez le paquet au fil du temps.

    Je fais une recherche sur la connexion stable de Smack. La plupart des smartphones Android ont chaque configuration et une restriction. Nous ne pouvons pas tester tous les périphériques. Voici mes conseils pour maintenir la connexion stable:

    1. Utilisez ForegroundService au lieu de BackgroundService, je propose cette approche car la plupart des appareils Android ont une restriction à une application qui a été exécutée en arrière-plan. Ils vont tuer l'application lorsque l'application glisse du gestionnaire de tâches. (Par exemple Asus zenphone ont une gestion de l'alimentation)
    2. ForegroundService empêche l'application d'être inactif.
    3. Register ReconnectingManager
    4. S'enregistrer en mode ping
    5. Enregistrez ServerPingWithAlarmManager

    Et c'est tout. Toute question, simplement commenter ci-dessous 🙂

    Best Regard R Aditya Gumay

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.