Como comunicar una pagina web con una App Movil?

Hola, si eres desarrollador móvil principiante y alguna vez te preguntaste: ¿como podrías hacer o te interesó saber como funcionaban las notificaciones de Facebook, Whatsapp o Twitter o de las muchas redes sociales que existen?
pues en este post, intento responder a tal pregunta que un desarrollador planteo a través de Facebook, ya que es una pregunta muy común en realidad, que merece tener su explicación.

PREGUNTA
Tengo un sistema en una pagina web ,en la pagina solo unas cosas se conectan en tiempo real a través de web sockets. Lo que quiero saber es: ¿Como comunicar esa pagina con una app movil?. Tengo la API con la arquitectura de JSON pero no se como hacer que lleguen las notificaciones en tiempo real al móvil.
Ernesto Benitez a traves de Facebook
RESPUESTA

Se debe notar que el desarrollador que realiza la pregunta, ya ha trabajado con tecnologías web, de hecho me mencionó que su backend esta desarrollado en Rails, por lo tanto ya conoce el protocolo HTTP, la arquitectura Cliente - Servidor, El estado Stateless del protocolo HTTP, lo que lo llevo a usar WebSockets, de hecho me menciona la Arquitectura REST. Sin embargo quiero mantener las cosas simples y genéricas, para que puedas entender como funciona, independientemente de la tecnología que se use, tratare de ser lo mas explicativo y dar un punto de vista simplificado, así que siéntete libres de hacer sus preguntas de cualquier duda que te encuentres, en los comentarios 😉.

Lo primero a tener en cuenta es, la Arquitectura Cliente-Servidor. la cual nos dice que un computador servidor(que puede estar desarrollado en PHP, RUBY, NODEJS, JAVA,GO,ETC) puede comunicarse con Clientes(que pueden ser el Navegador).

pero esto solo nos permite que el Servidor entrege paginas web, o contenido multimedia, al Navegador, lo que al terminar cierre la conexion. lo que te lleva a pensar que cada vez que el navegador solicita una pagina, el servidor responde dicha pagina y cierra la conexion y este proceso, se repite. entonces como se llevan a cabo los chats bajo este enfoque te preguntaras, ya que si se cierra la conexion en cada respuesta, ¿como es que un chat puede mantener todos los mensajes tan fluidos?.
La respuesta más simple son los websockets, aunque antes de que estos aparecieran se implemetaba un truco o hack, por decirlo de alguna manera, en el que el navegador se mantenia continuamente solicitando datos al servidor, lo que funciono a su tiempo, pero como supones, no es una manera eficiente de hacer conexiones bidireccionales( conexiones que mantienen conexion en dos puntos y no la cierran, es decir el navegador y el servidor se mantienen comunicados).
Bien entonces al menos ya sabes que ahora lo unico que tienes que hacer para comunicar tu servidor(que puede estar desarrollado en cualquier tecnologia como PHP, RUBY, NODEJS, ETC) con tu aplicación es a traves de websockets, lo que te permite intercambiar datos, de hecho un ejemplo común que se muestran en los websockets es el de desarrollar Chats, o juegos en tiempo real o redes sociales.

ahora: ¿como hacemos enviar datos del servidor al cliente?

Para los que ya desarrollan tiempo en la web, ya han descubierto que no existe una sola forma de hacer las cosas, de la misma forma, aqui te presento otras alternativas a websockets:


  • Push Notifications
  • HTTP Streaming, Long Polling, Polling
  • Conexion Directa TCP/IP
  • WebRTC
las formas que te presento son algunos enfoques, y cada uno toma su tiempo de estudio, pero para decidirte cual usar o investigar para el proyecto que quieras llevar a cabo tienes que tener en cuenta lo siguiente:

  1. la funcionalidad que estas  intentado construir en tu aplicación
  2. los datos que estas intentando transmitir o entregar desde tu Backend y sus requerimientos
para hacer un resumen 

Push Notifications
para simples push de datos al cliente te será suficiente, quizas te puede servir solo para mandar alertas o pequeños mensajes desde tu servidor a tu app Android por ejemplo.

WebSocket

como mencione anteriormente, te permite hacer conexiones bidireccionales persistentes, o en palabras simples te permite mantener comunicado tu servidor y tu aplicacion movil sin cerrar la conexion, debido a que es una simple conexion persistente, hace un uso moderado de los recursos, como la bateria o la cantidad de consumo de red, si son aspectos que te interesa en tu App.

WebRTC

una implementación relativamente nueva, para hacer conexiones de muchos clientes, en lo personal recomendaría si los datos que se transmiten son audios, videos, o similares, debido a que se base en P2P.

Aqui encontraras una lista de Tecnologías para transmision de Datos en tiempo Real

FUENTES

Comentarios