Cómo implementar un módulo push de Android simple
Y una solución completa de notificaciones push, pero es relativamente problemático de implementar en la plataforma Android. En los últimos días hemos realizado una investigación preliminar sobre el servicio de notificaciones push de Android.
En la plataforma móvil Android, Google proporciona el servicio C2DM (Cloud to Device Messaging). Al principio, planeé utilizar este servicio para implementar la función push en mi teléfono móvil.
Mensajería de nube a dispositivo de Android
(C2DM) es un servicio que ayuda a los desarrolladores a enviar datos desde servidores a aplicaciones de Android. Este servicio proporciona un mecanismo simple y liviano que permite al servidor notificar a las aplicaciones móviles.
El programa se comunica directamente con el servidor para obtener actualizaciones de la aplicación y datos del usuario del servidor. El servicio C2DM es responsable de procesar transacciones como colas de mensajes y distribuir estas transacciones a las aplicaciones que se ejecutan en el dispositivo de destino.
Noticias.
Sin embargo, después de algunas investigaciones, se descubrió que existen grandes problemas con este servicio:
1) C2DM está integrado en el sistema Android 2.2 y no es compatible con el antiguo 1.6. a sistemas 2.1;
2) C2DM necesita depender del servidor C2DM proporcionado por Google. Debido al entorno de la red doméstica, este servicio a menudo no está disponible. Para usarlo bien, nuestro servidor de aplicaciones también debe estar en el extranjero, lo que me temo que no todos los desarrolladores pueden hacer.
Bajo las dos limitaciones anteriores, finalmente abandoné este plan, pero me gustaría utilizar otro artículo para presentar en detalle el marco C2DM y los métodos de configuración correspondientes del cliente y el servidor de aplicaciones, que pueden ser utilizado como estudio y referencia.
Por supuesto, C2DM no puede cumplir con nuestros requisitos, por lo que debemos implementar nosotros mismos el protocolo de comunicación entre el cliente móvil de Android y el servidor de aplicaciones para garantizar que cuando el servidor de aplicaciones quiera enviar un mensaje al Android especificado dispositivo, los dispositivos Android pueden recibirlo a tiempo. Permítanme presentarles varias soluciones comunes:
1) Sondeo: la aplicación debe conectarse al servidor periódicamente y consultar si ha llegado algún mensaje nuevo. Debe comunicarse con el servidor usted mismo, como una cola de mensajes. Además, debe considerar la frecuencia de las encuestas. Si es demasiado lento, es posible que algunos mensajes se retrasen. Si es demasiado rápido, consume mucho ancho de banda de la red y batería.
2) SMS: en la plataforma Android, al interceptar SMS y analizar el contenido del mensaje, se puede entender la intención del servidor. Esta es una gran idea y he visto a gente hacer esto.
Aplicaciones. La ventaja de esta solución es que puede lograr una operación completa en tiempo real. Pero el problema es que el coste de esta solución es relativamente alto y le resulta difícil encontrar una pasarela de envío de SMS gratuita. Respecto a la implementación de este plan, puede
consultar el siguiente enlace: /apis/mobile-java-push/.
3) Conexión persistente: Esta solución puede solucionar los problemas de rendimiento causados por el sondeo, pero seguirá consumiendo la batería del teléfono móvil. El servicio push de Apple funciona muy bien, porque solo se garantiza que cada teléfono móvil mantendrá una conexión con el servidor. De hecho, así es como funciona C2DM. Pero esta solución también tiene desventajas, es decir, nos resulta difícil implementar un servicio confiable en teléfonos móviles. El sistema operativo Android permite
Puedes cancelar los servicios del sistema en caso de poca memoria, por lo que lo más probable es que el sistema operativo elimine el servicio de notificaciones.
Las dos primeras soluciones tienen deficiencias obvias, y la tercera solución también tiene deficiencias, pero podemos compensarlas con un buen diseño y hacer que la solución funcione de manera efectiva. Después de todo, debes saber que GMail, GTalk y Google Voice se pueden actualizar en tiempo real.
Uso del protocolo MQTT para implementar push de Android
MQTT es un protocolo ligero de publicación/suscripción de mensajes y es una solución ideal para implementar un servidor de push de mensajes basado en un cliente móvil.
Podemos descargar el código de muestra para este proyecto desde aquí y encontrar una implementación del lado del servidor escrita en PHP.
La arquitectura es la siguiente:
WMQTT.jar es la implementación del protocolo MQTT proporcionado por IBM. Puedes descargarlo desde el siguiente sitio web. Puede agregar este paquete jar a su propia aplicación de Android.
IBM también proporciona Real Small Message Broker (RSMB), que es un broker MQTT sencillo. De forma predeterminada, el puerto 1883 está abierto. Dentro de la aplicación, se encarga de recibir mensajes del servidor y reenviarlos al dispositivo móvil designado.
SAM es una biblioteca PHP escrita para MQTT. Puedes descargarlo desde aquí.
Send_mqtt.php es un script php que recibe mensajes vía POST y los envía a RSMB vía SAM.
Código de ejemplo:
Puedes descargar la aplicación de muestra desde GitHub. Después de ejecutar la aplicación, acceda a /demo/android-push/ a través del navegador de su móvil. También puede descargar el código fuente de Android-push desde esta dirección de GitHub, que contiene el script send_mqtt.php.
Uso del protocolo XMPP para implementar Android push
Esta es la solución que adopté en el proyecto. De hecho, la capa inferior del servidor C2DM oficial de Google también está encapsulada mediante el protocolo XMPP.
XMPP (Protocolo de presentación y comunicación extensible) es un protocolo basado en lenguaje de marcado extensible (XML) que se utiliza para mensajería instantánea (IM) y detección de presencia. El protocolo podría eventualmente permitir a los usuarios de Internet enviar mensajes instantáneos a cualquier persona en Internet.
Androidpn es una implementación de notificaciones push de Android de código abierto de Java basada en el protocolo XMPP. Contiene un cliente y un servidor completos. Después de estudiar el código fuente, descubrí que el servidor básicamente se modificó e implementó en base a otro proyecto de código abierto, openfire. Pero lo que es deprimente es que la documentación de Androidpn está escrita en coreano, por lo que todo el proceso de investigación consiste básicamente en mirar el código fuente. El diagrama de implementación es el siguiente:
El cliente androidpn necesita utilizar un paquete de protocolo XMPP de código abierto ASack basado en java, que también se basa en smack, otro proyecto de código abierto bajo openfire.
Pero no necesitamos compilarlo nosotros mismos, podemos usar asmack.jar directamente en el cliente androidpn. Explotación del cliente.
La clase XMPPConnection establece una conexión persistente con el servidor, realiza el registro de usuario y la autenticación de inicio de sesión a través de esta conexión, y también recibe notificaciones enviadas por el servidor a través de esta conexión.
El lado del servidor de androidpn también está implementado en lenguaje Java, basado en el proyecto de código abierto openfire, pero su parte web utiliza el framework spring, que es diferente de
Open Fire. El servidor Androidpn consta de dos partes. Una parte es el servicio XMPP que escucha en el puerto 5222 y es responsable de comunicarse con el cliente.
La clase XMPPConnection se comunica, se utiliza para el registro y la autenticación de usuarios y envía mensajes de notificación push. La otra parte es el servidor web, que utiliza un servidor HTTP ligero.
Responsable de recibir las solicitudes Web de los usuarios. La arquitectura del servidor es la siguiente:
El nivel superior contiene cuatro componentes, a saber, SessionManager y Auth.
Administrador, Administrador de Asistencia y Notificación
Manager.SessionManager es responsable de administrar la sesión entre el cliente y el servidor, y Auth Manager es responsable de la administración y presentación de la autenticación de usuarios del cliente.
El administrador es responsable de administrar el estado de inicio de sesión de los usuarios del cliente y NotificationManager es responsable de implementar la función del servidor que envía mensajes al cliente.
La interfaz del lado del servidor es la siguiente, correspondiente a los módulos funcionales anteriores:
Después del envío, podemos ver el mensaje recibido en el teléfono móvil:
Esta solución La mayor ventaja de la solución es su simplicidad. No necesitamos depender de una versión del sistema operativo como C2DM, y no nos preocupa que los servidores de Google dejen de estar disponibles algún día. Utilizando el protocolo XMPP, el protocolo se puede ampliar aún más para lograr funciones más completas.
Con esta solución, actualmente solo podemos enviar mensajes de texto, pero generalmente es suficiente para push, porque no podemos esperar obtener todos los datos a través de push. En términos generales, push simplemente le dice al teléfono móvil que se han producido algunos cambios en el servidor. Después de recibir la notificación, el cliente debe obtener activamente los datos más recientes del servidor. Esta es la implementación completa del servicio push.