Con la aparición del iPhone de Apple en 2007 surgieron desafíos inéditos para diseñadores y desarrolladores. Si bien ya existían muchos dispositivos de bolsillo y con pantalla táctil (como los PDA, asistentes digitales personales), el iPhone inauguró una popularización definitiva de este modelo, a tal punto que, en la actualidad, los dispositivos mobile son más utilizados que los desktop [ComScore, 2016]. Tal fenómeno impuso la necesidad de diseñar y programar teniendo en mente características como la interacción por tacto y voz, pantallas más pequeñas y baterías de autonomía corta. Estas y otras peculiaridades determinaron que la experiencia mobile sea diferente a la experiencia desktop. Así, surgieron categorías como las aplicaciones móviles (en contraposición a los tradicionales programas de escritorio) y los sitios web responsive y adaptive.
Al mismo tiempo, desde el principio de este boom las aplicaciones nativas vienen concentrando una porción cada vez más importante del tráfico de Internet, en detrimento de los sitios web. Esto llevó a la aparición de las aplicaciones web, es decir, sitios web comunes que en su aspecto y funcionalidad imitan, en mayor o menor medida, a las aplicaciones software que podemos instalar desde tiendas como App Store y Google Play. En comparación, las aplicaciones nativas suelen resultar convenientes porque, al tener un acceso más profundo al hardware del dispositivo, pueden ofrecer más funciones. Muchos desarrolladores tratan de brindar una experiencia lo más parecida posible a la de una aplicación nativa sin dejar de utilizar HTML, CSS y JavaScript, aunque tengan que emplear algo de código nativo (ej.: PhoneGap) o concentrar toda la navegación en una sola página (ej.: AngularJS).
Flipkart (el mayor sitio de comercio electrónico de India) convirtió su sitio web en una progressive web app, logrando muy buenos resultados.
Sin embargo, el uso de código nativo nos obliga a desarrollar una versión diferente para cada plataforma, y las aplicaciones híbridas no se pueden compartir fácilmente a través de una URL, por lo cual no son realmente parte de la Web. Con estos y otros problemas en mente, Alex Russell, un desarrollador de Google, propuso en 2015 un nuevo modelo: las progressive web apps, o aplicaciones web progresivas. Estas aplicaciones presentan las siguientes características:
- Responsivas. Para adaptarse a cualquier factor de forma. Ver: Responsive Web Design: creando sitios web flexibles, Diseño web responsivo: muchos tamaños, una solución.
- Independientes de la conectividad. Mejoradas progresivamente con service workers para poder funcionar sin conexión. Un service worker es un script que el browser ejecuta de fondo (sin interferir con la página web), no interactúa con el DOM y responde a ciertos eventos (por ejemplo, cuando la red no está disponible). Ver: Mejora progresiva: sitios web más accesibles.
- Interacciones «tipo aplicación». Navegaciones e interacciones que semejan las de una aplicación, gracias una arquitectura Shell + Content. Se trata de un modelo donde primero se carga la estructura básica de la interfaz (guardándose en caché para futuras visitas) y luego se va añadiendo el contenido dinámicamente a través de una API. Esto permite una mayor velocidad de carga.
- Frescas. Siempre al día gracias al proceso de actualización de los service workers.
- Seguras. Se presentan a través de TLS (un requerimiento de los service workers) para evitar el snooping (intrusión de terceros que estén en la misma red).
- Hallables. Se pueden identificar como «aplicaciones» gracias a los manifests del W3C, y el ámbito de registración de los service workers permite que aparezcan en motores de búsqueda. El manifest es un archivo de JSON (un formato de intercambio de datos basado en JavaScript) donde se declaran los metadatos asociados a la aplicación, como su nombre, su descripción, sus íconos y la orientación (vertical u horizontal) con que debería mostrarse cuando el usuario la abre.
- Re-engageable. Esta cualidad implica que el usuario pueda regresar fácilmente a la aplicación una vez que ya la cerró, o cuando tiene en primer plano la ventana de otra aplicación, o bien cuando no estaba usando el dispositivo. Esto es posible gracias a características del sistema operativo como las push notifications (por ejemplo, cuando no estábamos usando la aplicación de Facebook y nos aparece un mensaje indicando que alguien nos solicitó amistad).
- Instalables. Su ícono se puede añadir a la pantalla de home a través de una función del browser. De esta manera, podemos acceder a ellas tan fácilmente como si fueran aplicaciones nativas.
- Enlazables. Se pueden compartir a través de una URL y no requieren de una instalación compleja.
El usuario comienza utilizando una progressive web app como si fuera un sitio web común, pero, a medida que entra en confianza con ella, va otorgándole distintos permisos para que gane terreno en su dispositivo; por ejemplo, autorizando que le envíe notificaciones, añadiéndola a la pantalla de home o mostrándola en pantalla completa (no se ven las barras del browser). Así, progresivamente, el sitio se convierte en una aplicación, y de allí el nombre.
Las progressive web apps buscan combinar las virtudes de las aplicaciones nativas con las de las aplicaciones web, reduciendo la necesidad de desarrollar una aplicación de cada tipo o evitando el dilema de elegir entre uno y otro. Dan Rowinski aporta un dato impactante: los usuarios pasan mucho más tiempo en aplicaciones nativas que en sitios web, pero los sitios web tienen muchos más usuarios que las aplicaciones nativas [ComScore, 2015]. En otras palabras, las aplicaciones web sirven para llegar a muchos usuarios, mientras que las aplicaciones nativas sirven para mantener a algunos de esos usuarios «enganchados». Con una progressive web app podemos lograr ambos beneficios simultáneamente. Un caso de éxito es el de AliExpress —importante sitio de comercio electrónico de China—, que gracias a una aplicación de este tipo incrementó notablemente su tasa de conversión para usuarios nuevos, la cantidad de páginas visitadas por usuario y el tiempo de duración de cada sesión.
Con su alta velocidad, su facilidad de uso y distribución y su capacidad de funcionar offline, las progressive web apps pueden brindar una experiencia muy cercana a (y a veces mejor que) la de las aplicaciones nativas, desestimando la profecía de que la Web estaba condenada a morir. De todas formas, aunque estas aplicaciones empleen el concepto de mejora progresiva, el soporte para service workers todavía es muy reducido, por lo cual muchos usuarios tendrán que afrontar una experiencia más limitada, propia de un sitio web común. Si este enfoque no nos permite ofrecer de manera universal las características que queremos en nuestra aplicación, quizás la modalidad nativa sea más conveniente.
Artículos relacionados
- Nativa, web o híbrida: distintos tipos de aplicaciones mobile
- ¿Qué tipo de aplicación mobile me conviene desarrollar?