[Android] La Chatbox sur Android

Vous avez un projet et voulez le présenter à la communauté? Qu'il soit fini ou au stade d'idées, venez donc le partager, qu'il soit en rapport avec MLP ou non
Répondre

Message par Nacle » 07 avr. 2017, 23:40

Avatar du membre
Nacle
Brony connaisseur
Messages : 268
Enregistré le : 15 déc. 2013, 01:25
Sexe : Garçon
Localisation : Ta salière

[Android] La Chatbox sur Android

Note importante : Je ne peux plus tester cette application, suite à mon bandef, je la publie donc pour que ceux qui sont intéressés l'essayent, et continuent à la coder si ça leur plait.

Lien du projet
GitHub
Fichier APK (Sera compilé demain)

Présentation
Un projet sur lequel je suis depuis 2-3 semaines, en complément des projets de loggers sur Desktop.

L'interface mobile actuelle de la CB sur le web est très bien, mais Android pose un problème. Si l'utilisateur mets en veille son téléphone, la CB l'éjecte car la connexion est perdue. Du coup, j'ai cherché un moyen d'avoir la CB fonctionnelle même lors de la veille du téléphone, et avec une interface bien plus performante que l'interface actuelle, qui bien que très rapide sur PC, montre de fortes limites de performance sur les appareils mobiles.

Le but a donc été de coder une application légère et simple pour accéder à la CB depuis Android. La Cb utilise un système de connexion relativement répandu, et son code source est visible, ce qui permet de rapidement créer un nouveau client. Sur cette base, j'ai codé cette application Android.

Elle est loin de rivaliser avec la CB, et souffre des limitations d'Android, mais permet de discuter facilement sans drainer la batterie.
Présentation technique
Interface
L'interface est une simple Activity avec des Fragment. Elle est composée d'un TabLayout, en français, un layout) onglets. Ces onglets contiennent un ListView pour les messages, un drawer contenant un ListView pour les utilisateurs, et une barre pour envoyer les messages. Ce découpage permet de facilement réutiliser la même vue dans les différents onglets, par le biais des fameux Fragments.

Socket (Client)
L'application se sert de la librairie Socket.IO-Client-Java, cette librairie permet de dialoguer simplement avec des serveurs utilisant Socket.IO. Le code client de la Chatbox étant public, j'ai tout simplement transféré le fonctionnement des différents signaux émis et reçus pour émuler un client. Le résultat est que la CB me vois comme un utilisateur normal.

Service
L'application utilise en fond un IntentService. Il s'agit d'un process asynchrone qui tourne en fond. Une tâche de fond si vous préférez. Son but est de garantir que la connexion à la Chatbox sera maintenue durant les périodes veille, et de mise en arrière plan de l'interface. Le service héberge donc le Client Socket.IO, et interagis avec l'interface.

Traitement asynchrone
En interne, la cohabitation d'un Service avec Socket.IO et une Activité implique de pouvoir traiter de manière asynchrone les signaux. Exemple, lors de la réception d'un message, il faut que le Service dise à l'interface "J'ai recu le message <message>" pour que l'interface l'affiche. Ceci est fait au moyen de la librairie EventBus. Elle permet à des fonctions de s'inscrire au Bus par le biais du mot clé @Subscribe, pour que lorsque qu'un signal est envoyé, elle le reçoivent, et soit exécutées.
Fonctionnalités
Fonctionnalités implémentées
  • Envoi / Réception de messages
  • Envoi / Réception de MP
  • Liste d'utilisateurs
  • Accès aux messages précédents à la connexion
  • Fonctionne même quand le téléphone est en veille
Fonctionnalités non implémentées mais en cours d'implémentation
  • Rejoindre d'autres channels
  • Images/GIFs/Vidéos
  • Notifications en cas de nouveau message
Fonctionnalités non implémentées
  • MPs dans des onlgets séparés
  • Stockage local de l'historique global des messages (équivalent à mon logger, mais en local sur votre téléphone)
Problèmes rencontrés
  • Limitations dues aux TextView qui permettent d'afficher du HTML, mais il est compliqué de charger les balises <img>
  • Limitations dues au cycle de vie du IntentService, qui empêchent de lancer des Notifications facilement, comparé à un traitement synchrone des notifications.
  • Limitations dues à la complexité de créer des bases de données, qui ont relégué le système de logs au second plan.
Voilà un gros résumé du projet avec les parties bien découpées pour ceux qui sont intéressés d'en savoir plus.

L'APK sera compilé demain, le temps que je survole rapidement les derniers gros soucis. En revanche aucun test ne pourra plus être effectué de ma part. L'application contourne les bans dû à la façon qu'ils ont d'être codés sur le serveur, et utiliser l'application peut donc mener à un bandef forum pour moi, qui suis déjà bandef de la CB.
:sisi:

Répondre