Ya he tratado de desarrollar una aplicación de mensajería y siempre he sido un fracaso, así que permítanme compartir por experiencias.
Bueno, por aplicación de mensajería, supongo que te refieres a una aplicación de mensajería instantánea en lugar de una aplicación de mensajería SMS.
- Cómo obtener la última versión de Android Studio
- Cómo generar código OTP en Android
- ¿Es posible crear una aplicación de alarma personalizada en un teléfono Android? En caso afirmativo, ¿cuál sería el lenguaje de programación que se puede utilizar?
- Cómo hacer que SurfaceView se pueda ampliar en Android
- ¿Qué es ANR en Android y cómo los desarrolladores sabemos dónde sucedió exactamente ANR en nuestra aplicación?
Mejorando una idea de hackathon que ganamos, decidimos hacer una aplicación de mensajería para que personas de la misma localidad chatearan. Soy un desarrollador bastante ingenuo en ese momento y la mensajería instantánea es una bestia . Incluso después de aproximadamente 1 año de experiencia en el desarrollo de aplicaciones de Android, pensar en desarrollar un Instant Messenger es una pesadilla para mí. Sin embargo, desarrollé la aplicación y elegí el camino más fácil disponible en ese momento, es decir, Parse .
Parse tenía una API fácil de usar para comenzar con las notificaciones push y permitía un millón de notificaciones push gratis por mes, lo cual es más que suficiente para mí. Así que comencé con Parse y desarrollé la aplicación. Tuvo algunos problemas, como una mayor latencia varias veces, etc., pero estoy de acuerdo, ya que no quería destronar a Whatsapp con mi velocidad, solo quería desarrollar una aplicación que me permitiera chatear con otra persona que tenga la misma aplicación. . La aplicación nunca fue un éxito (esa es una historia completamente diferente), pero fue una gran experiencia de aprendizaje para mí y tuve la orgullosa sensación de poder desarrollar una aplicación que tenía pocas de las funcionalidades de una aplicación importante como WhatsApp. .
La aplicación continúa en la Play Store, pero en un día auspicioso, Parse anuncia que cerrará Parse después de ser adquirido por Facebook dentro de unos meses. No planeaba mover la aplicación a otro servicio ya que de todos modos no tenía ningún usuario. Me di por vencido pero mi compañero no (socio no técnico). Entonces, mirándolo, decidí, bien, déjame echarle otro vistazo. Ahora ni siquiera podré entender qué monstruo ha codificado en ese momento, pero estoy listo para enfrentarlo. Durante dos días me quedaría estupefacto por el desorden que hice, pero lentamente lo recogería y lo mejoraría.
Entonces comencé a buscar opciones. Lo primero que me pareció es GCM / FCM (Google Cloud Messaging / Firebase Cloud Messaging). Incluso mientras estaba usando parse intenté usar GCM. Había un formulario de registro en ese momento para poder usar GCM y nunca recibí una respuesta de Google que me permitiera usarlo. Sin embargo, traté de mirar su documentación. Es un horror absoluto para mí ya que no tenía idea del protocolo HTTP o XMPP y, por lo tanto, no podía entenderlo. Recientemente volví a hacerlo, pero ahora estoy equipado con el conocimiento de HTTP, por lo tanto, revisar la parte HTTP de la documentación ha sido muy fácil para mí. Y no hay un formulario de registro, también puede acceder directamente a las credenciales de GCM. Puedo lograr una notificación push en la aplicación de Android. Ahora quería probar el uso de XMPP, pero aún me llevó unos 2-3 días entender qué significa GCM con XMPP.
En este momento, puede estar confundido sobre qué es HTTP y qué es XMPP
- HTTP : – Es el protocolo que alimenta la web estándar y, por lo tanto, el protocolo más popular. Se puede usar junto con GCM para enviar notificaciones push . El proceso es el siguiente: implementa un servidor web utilizando cualquier marco de su elección Node.js / Django / Ruby on Rails / Laravel, etc. Cada dispositivo Android obtiene un gcm_id único que puede almacenarse en el servidor. Si el servidor envía una solicitud HTTP a la URL de GCM con la identificación de registro de su dispositivo, recibirá una notificación. El proceso es muy simple de implementar. En el lado del servidor, usé python-gcm (solo es compatible con GCM HTTP) junto con Django para manejar las solicitudes HTTP.
- XMPP : – Es el protocolo que se utiliza principalmente para aplicaciones de mensajería y, por lo tanto, no es tan popular como HTTP. Se considera que su latencia es menor que cuando se usa GCM con HTTP y, por lo tanto, se usa en aplicaciones de velocidad crítica como la mensajería instantánea. XMPP con GCM admite tanto mensajes descendentes, es decir, enviar notificaciones push del servidor a la aplicación de Android como mensajes ascendentes, es decir, enviar mensajes de la aplicación de Android al servidor y hay un servidor de Google en el medio que actúa como intermediario . Para implementar XMPP con GCM, es necesario establecer una conexión XMPP con el punto final de Google. Por lo tanto, es necesario iniciar un cliente XMPP y conectarlo al punto final de Google en su servidor. La conexión con el servidor de Google debe estar viva siempre. Ahora, cada vez que su aplicación de Android envíe un mensaje al punto final de Google, su servidor lo recibirá y viceversa.
Durante muchos días estuve confundido con este servidor y cliente XMPP y lo que se debe implementar para usar con GCM. Lo he intentado muchas veces, pero como Google está lleno de muchas discusiones, siempre tuve que renunciar, ya que después de un tiempo nunca supe lo que estaba haciendo. Permítanme explicar las diferencias entre el servidor XMPP y el cliente aquí.
- Servidor XMPP : – Si no desea utilizar GCM para enviar mensajes, puede crear un servidor XMPP propio. Todavía soy ingenuo en esta parte y estoy comenzando en él, por lo tanto, no puedo decir muchas cosas al respecto. Actualmente estoy revisando este libro XMPP: la guía definitiva para comenzar a implementar un servidor XMPP. Su aplicación de Android abre una conexión a este servidor XMPP y puede usarla para enviar mensajes. Un inconveniente es que siempre debe mantener una conexión con el servidor para poder recibir mensajes que puedan agotar la batería.
- Cliente XMPP : esta es la parte que se utiliza en GCM. Los clientes HTTP están muy extendidos, pero los clientes XMPP son pocos. Para Java, el preferido es Smack y, por suerte, para Python pude encontrar uno en xmpppy . Ahora suponga que desea enviar un mensaje de un teléfono Android a otro, la ruta es como este teléfono Android 1 -> Google -> cliente XMPP mantenido en su servidor -> Google -> dispositivo Android 2 .
Ahora puede preguntar cuál es la necesidad de XMPP Server cuando GCM solo puede manejar la parte de mensajería. Aunque GCM es lo suficientemente bueno la mayoría de las veces, no se considera confiable. Hay muchos desarrolladores que se quejaron de que la aplicación no recibió la notificación GCM pocas veces. Entonces, todos los grandes jugadores como Whatsapp hacen esto. No usan GCM como el servicio principal para su mensajería instantánea. En su lugar, alojan su propio servidor XMPP para enviar mensajes. Cada vez que se cierra la aplicación de Android y, por lo tanto, se cierra la conexión XMPP, ahora si el servidor necesita enviar un mensaje al dispositivo fuera de línea, usan GCM para enviar una notificación push. Ahora, cuando el usuario hace clic en una notificación push, la aplicación se abre y se conecta al servidor XMPP y recupera todos los mensajes pendientes. Por lo tanto, usan GCM solo para sincronizar los mensajes, pero no para los servicios de mensajería convencionales.
XMPP no es la única opción para la mensajería instantánea. Muchas personas también usaron enchufes, pero yo nunca los he usado, así que me abstengo de comentarlos.