Para añadir el chat a una aplicación para Android que hay una serie de opciones. Presentaré las opciones ordenadas por la cantidad de experiencia en desarrollo que se requiere, de menor a mayor.
uso de un servicio de back-end en tiempo real
Hay una serie de empresas que ofrecen servicios de back-end en tiempo real. Estos servicios le proporcionarán un SDK que le permite a su aplicación acceder a sus servidores. Con el SDK, podrá transmitir datos entre dispositivos.
Aquí es una lista de los servicios más populares:
Firebase
Google base de datos en tiempo real de propiedad que utiliza WebSockets y MongoDB ya que es la tecnología de pila de núcleo. El servicio le permite guardar datos en una base de datos sin SQL y luego registrarse para recibir actualizaciones en tiempo real cuando esos datos cambian. También ofrecen servicios para notificaciones automáticas y almacenamiento de archivos. También hay un marco de mensajería de código abierto de terceros (licencia MIT) disponible para iOS y Android.
Firebase tiene una biblioteca llamada GeoFire que le permite conocer su ubicación de aplicaciones.
Pusher/PubNub
He agrupado estos juntos, ya que son bastante similares. Brindan infraestructura y tecnología de transmisión en tiempo real. Puede establecer canales entre grupos de dispositivos y transmitir datos entre ellos. No proporcionan ningún medio para autenticar usuarios por lo que necesitaría un servidor de aplicaciones.
Quickblox
Quickblox está dirigido específicamente al mercado de la mensajería instantánea y que utiliza un servidor XMPP en el backend. Como usan XMPP, este servicio tiene muchas funciones de mensajería incorporadas, como listas de privacidad e indicadores de tipeo. Proporcionan una aplicación de mensajería de ejemplo razonable pero básica.
Layer
capa es un medio camino entre Quickblox y PubNub/Pusher. Ofrecen una plataforma de transmisión dirigida a la mensajería instantánea. Tienen algunas funciones de mensajería, como el bloqueo básico, pero esta no es una implementación de mensajería a gran escala como Quickblox. Tienen una biblioteca de componentes de UI que se pueden usar para ayudar a construir una aplicación completa: Atlas.
Si utiliza un backend como servicio, siempre tendrá que crear el cliente de chat usted mismo. Si opta por una de las opciones más generales, como Firebase, también deberá crear su propio protocolo de mensajería.
Estos servicios le ahorrarán tiempo cuando se trata de la implementación del servidor en tiempo real, la configuración del servidor y la escala.
XMPP
Otra opción es la de alojar un servidor XMPP mismo. Hay un número de servidores XMPP de código abierto disponibles:
servidores XMPP le proporcionará una gran cantidad de funcionalidad de mensajería fuera de la caja. Por lo general, no incluyen ningún conocimiento de la ubicación, pero esto podría resolverse configurando el servidor para alojar la base de datos del usuario en un servidor separado, lo que le permitiría agregar tablas adicionales para manejar la geolocalización. Una alternativa sería usar presencia para actualizar los dispositivos relevantes cuando la ubicación de un usuario cambia en cierta cantidad.
Para construir el cliente, recomendaría usar Smack. Como XMPP es un estándar abierto, su cliente debe poder trabajar con servidores y clientes XMPP de terceros.
Si no desea construir el cliente usted mismo, hay una serie de proyectos de código abierto (la mayoría bajo licencias de copia izquierda) que podrían actuar como punto de partida. Xabber sería un ejemplo, pero puede encontrar más buscando.
Compilación del servidor sí mismo
La última opción es construir el servidor de mensajería a sí mismo. Esto tiene la ventaja de que puede agregar las características que necesita y mantenerlo razonablemente simple. Un buen enfoque sería usar Symfony y el paquete WebSocket para el back end en tiempo real y Android WebSockets para el cliente. Al utilizar este enfoque, tendría mucha flexibilidad para implementar la funcionalidad de ubicación geográfica.
No es una aplicación de chat, pero tal vez un SDK que puede ayudar es Scringo (scringo.com) – Kalisky