2011-12-20 22 views
6

Estoy desarrollando una aplicación para iOS. Existen diferentes 'áreas' para la aplicación, y los usuarios pueden publicar 'cosas' para ellos. Otros usuarios que miran la misma área deben enviar el mensaje enviado a su teléfono (pero solo si la aplicación se está ejecutando).Usando XMPP para enviar información en tiempo real a la aplicación iOS en ejecución

He comenzado a trabajar en un backend Django con una API RESTful. Planeo alojar el backend en Amazon Web Services, y cada vez que se agrega algo a un 'área', colocando el tiempo de actualización y 'área' en una cola, usando Amazon Simple Queue Service. Voy a hacer una aplicación de Python que procese elementos en la cola, consulte la base de datos para ver qué usuarios tienen nuevas 'cosas' que pueden descargar: actualmente esta parte está planeada para enviar un Apple Push Notification al teléfono, y si la aplicación se está ejecutando, puede realizar una solicitud RESTful simple para obtener los datos nuevos en formato JSON.

Sin embargo creo que XMPP sería una mejor solución (usando XMPPFramework en el lado de iOS), y permitiría soportar Android en el futuro.


he hecho un gran trabajo de investigación en el uso de XMPP para este fin, pero la documentación sugiere que estaría utilizando la red XMPP público, que los usuarios tendrían que configurar una cuenta XMPP, y es no está claro cómo enviar información sin chat.

Este proyecto requiere el uso de XMPP exclusivamente para enviar información desde el servidor a un dispositivo de usuario. Por lo tanto, debe ser una red privada XMPP, si los usuarios se pueden registrar necesarias para una cuenta XMPP en esta red privada (pero detrás de las escenas, no deben saber lo que la tecnología está impulsando la aplicación.)


¿Es posible usar XMPP solo para enviar información a una aplicación móvil? Muchas respuestas/tutoriales en Internet básicamente solo sugieren usar un servidor y cliente XMPP, sin mencionar cómo puede conectar los dos en una red privada para enviar datos determinados por otra cosa que no sea el servidor XMPP.

Gracias por su ayuda de antemano :)

Respuesta

15

Sí, es posible. Más que eso, es completamente posible enviar y recibir todo lo que desee a través de XMPP.

Generalmente se usa XMPP para las cuentas de Jabber de chat. Esto significa algunas cosas.

  1. Cada usuario tiene que ser configurado como usuario en el servidor. Esto es para que el servidor sepa a qué clientes enviar los mensajes. No es difícil simplemente configurar un usuario/pase aleatorio y vincularlo directamente a la aplicación.

  2. El envío de información de chat solo significa que hay un remitente y un destinatario. En su caso, probablemente no tenga en cuenta al remitente, pero podría ser útil si tiene varios lugares de donde podrían provenir los mensajes.

  3. Un mensaje puede contener la información que desee. No recuerdo completamente (ha pasado un tiempo desde que usé XMPP) pero creo que puedes enviar XML dentro del mensaje mismo (o json o lo que sea) o puedes ADJUNTAR XML adicional al mensaje y simplemente abandonar el mensaje en sí mismo en blanco (o con un valor nominal).

Lo que necesita para empezar es un servidor XMPP.Puedes instalar esto en tu servidor web (supongo que probablemente puedas instalarlo en AWS, pero no estoy seguro). Este es el servidor que uso siempre, Openfire, es muy fácil de configurar y usar (y tiene una interfaz web agradable que puede usar para configurar todo). Esto le permite enviar mensajes de recepción y hace que todo sea "privado". Esto significa que, aunque podría conectarse a redes jabber públicas, también puede restringir el acceso al servidor.

A continuación, quiere una API basada en la web. Hay un buen marco de php, xmpphp que te ayudará a configurar una API. Esta api te permitirá enviar mensajes de tu secuencia de comandos python (por ejemplo, post req al curl) al servidor xmpp que lo entregará en el iPhone. Si no quieres enviar mensajes, ya estás listo. ¡Escuchar los mensajes XMPP usando php es una gran cantidad de peces!

Otra cosa a tener en cuenta es que tendrá que enviar estados desde la aplicación para que el servidor sepa si está conectado y "escuchando" o no. Una vez más, todo esto está razonablemente bien documentado en Internet si lo buscas (no puedo recordar los pormenores exactos). Entonces, en su script python/php puede probar para ver si el usuario al que está tratando de enviar un mensaje está actualmente "conectado" y "escuchando" como estaba. Si no lo son, deberás implementar las notificaciones push y enviar una notificación push. Si no está seguro de esto, hay un fantástico servicio llamado urban airship que recomendaré. Envían hasta 1,000,000 de notificaciones push al mes de forma gratuita (y las notificaciones posteriores son bastante razonables). De lo contrario, prepárate para un mundo de dolor configurando el servicio tú mismo. (¡He oído!)

Espero que hayan respondido la mayoría de sus preguntas. Es un tema bastante especializado (mucha gente no sabrá sobre XMPP, es una de esas cosas de las que solo sabrá si necesita saber al respecto). Sin embargo, XMPP es muy poderoso y una solución mucho mejor que repetir solicitudes HTTP y todo tipo de problemas. Hay mucha información en internet si puedes encontrarla, pero es posible que tengas que ser un poco inteligente sobre cómo interpretar la información, es una de esas cosas que todavía no se ha trasladado al iPhone en la corriente principal (en mi opinión).

EDITAR ... una cosa más

Cuidado con los abandonos - abandonos Internet y tal. Parece obvio, ¡pero siempre me muerde! Siempre olvide que a veces el internet se corta y mis conexiones XMPP necesitan ser reconectadas. Esp si las personas están poniendo la aplicación en segundo plano y luego volviendo a ella más tarde. :) Recuerde reconectar cuando lo necesite.

+0

Muchas gracias, esa fue la mejor y más útil respuesta que he leído en SO. Explicó muy claramente todo lo que no entendí o no sabía sobre el uso de XMPP y aplicaciones móviles: D –

+0

Bueno, estoy muy contento, gracias por los comentarios. :) Ha pasado un tiempo (me parece que en realidad no usas XMPP a diario! Lol) pero si puedo ayudar más, házmelo saber, puedes encontrarme en twitter (@tclayson). –

+0

@ ThomasClayson: ¿Ha podido enviar imágenes y videos a través de XMPP utilizando XEP -0234 – iEinstein

Cuestiones relacionadas