Cochabamba – Bolivia
2019
2
Agradecimientos
A mis padres y hermano por todo el apoyo
incondicional y brindarme su colaboración en todo
momento, estos me permitieron llegar hasta donde
estoy ahora.
Porque los hijos somos el reflejo de todo el amor,
dedicación y empeño que nos dan los padres.
A mi tutor y a Digital Harbor por brindarme los
conocimientos, colaboración y concederme esta
oportunidad de superación.
A mis amigos quienes siempre han estado a lado mío
durante este diplomado.
¡Muchas gracias!
3
Índice de contenidos
1 Generalidades ................................................................................................................ 10
5
Índice de figuras
6
Figura 25. Ventana del navegador mostrando que el Service Worker está Instalado
Correctamente....................................................................................................................... 43
Figura 26. Pantalla del Navegador Mostrando la Pestaña del Archivo Manifest. ................ 44
Figura 27. Verificando que la Aplicación Web Progresiva Funciona Correctamente. ........ 44
7
Resumen
Analizando desde una perspectiva de experiencia de usuario, y tomando en cuenta que los
dispositivos móviles son actualmente de uso universal, junto con la necesidad de evolución
de las aplicaciones web, se planteó como objetivo construir una aplicación web progresiva,
añadiendo una serie de características nuevas a una aplicación web ya existente desarrollada
en angular, para que esta se comporte como una aplicación web nativa.
Como herramientas de desarrollo primordial se empleó el uso de Angular CLI, librerías CSS,
JavaScript en el Service Worker y algunas configuraciones que una aplicación web
progresiva debe cumplir.
8
Introducción
Actualmente muchas empresas utilizan una aplicaciones web con presencia Online y una
gran mayoría de los visitantes utilizan su dispositivo móvil para acceder a sitios Web,
lamentablemente una página web tradicional carece de algunas características que podrían
hacerla más atractivas para que los usuarios regresen.
Por otro lado para introducirnos al área de los dispositivos móviles es decir una aplicación
nativa en nuestra empresa, requiere un costo extra en producción para cada Sistema
Operativo, las aplicaciones suelen ser más pesadas, se debe descargar de las tiendas de
aplicaciones además existen procesos y permisos de instalación, etc.
Es por eso que se pone como propuesta, la realización de una Aplicación Web progresiva
con Angular CLI la cual soportara las mejoras en la cache con el Service Worker para poder
permitir un funcionamiento offline, poder visualizar desde el dispositivo móvil aplicando
características responsivas con frameworks especializados es esa área.
Por tanto el resultado de la presente monografía estará enfocado en convertir una aplicación
web Angular normal a una aplicación web progresiva básica; la cual demostrara el
funcionamiento, características nuevas, ventajas y desventajas de las Aplicaciones web
progresivas, también se podrá observar la diferencia en cuanto la experiencia al usarla.
9
1 Generalidades
Una página web es un documento digital de carácter multimediático, es decir que es capaz
de incluir audio, video y sus combinaciones, la cual puede ser accedida por un navegador
web y una conexión activa a internet, existen millones de páginas web en el mundo, a través
del navegador se puede acceder a toda su funcionalidad, actualmente se pudo observar que
la tecnología va cambiando muchos usuarios visitan las páginas web desde sus dispositivos
móviles, lo cual obligo a la web a solucionar y mejorar la web, implementando material
responsivo, rapidez, botones intuitivos y otras opciones relevantes en un dispositivo móvil.
Actualmente en la web nos encontramos en una etapa de cambio constante donde los usuarios
buscan la comodidad, rapidez, portabilidad, etc. Al observar el masivo uso de los dispositivos
móviles tanto en visitas a sitios web como al adquirir aplicaciones nativas. La web se vio
obligado a evolucionar y así buscar satisfacer a los clientes con una mejor experiencia de uso,
para ello se innovo con la creación de la tecnología de las aplicaciones web progresivas.
Las aplicaciones web progresivas no son una tecnología nueva pero ultimadamente están más
de moda después que Microsoft anunciara que Windows las soportara de forma nativa.
También están disponibles en Google Chrome, Firefox y Safari para dispositivos móviles.
Estas no dependen de ningún sistema operativo, sino que toman lugar en una página web en
un navegador, las páginas de Twitter, Facebook e Instagram son buenos ejemplos de
aplicaciones web progresivas que están funcionando actualmente.
Para la creación de páginas web existe un framework llamado Angular, que tiene sus propios
mecanismos de configuración, tanto para crear una web normal, como una aplicación web
progresiva que intentara mejorar progresivamente la experiencia de usuario.
10
2 Metodología
La tendencia a la filosofía primero móvil está basado en estadísticas que muestran que el uso
de tecnología móvil que corresponde a 51.1 % frente al 48.99 % a la de escritorio, la
utilización en América Latina de los sistemas operativos móviles alcanza al 35% con
tendencia a seguir creciendo, actualmente más de la mitad de las personas en el mundo ya
están conectadas a internet y por ultimo pero no menos importante la innovación en
tecnología móvil se ha estancado provocando que la tendencia de ventas de dispositivos
móviles disminuya en un -4% debiendo así buscar innovación en el área.
Tomando datos de latino américa que es la zona donde habitamos, según (GlobalStats, 2019,
pp. /os-market-share/all/south-america).
Enfocándonos en los 3 primeros puestos tenemos en:
11
Lo cual nos muestra como el sistema Operativo móvil Android, va manteniendo e
incrementando y esa tendencia en que todo se está convirtiendo en móvil, recalcando que aún
no se sobre paso a lo que es los equipos de escritorio.
3.2 Navegadores
Tomando datos de latino américa desde enero 2019 según (GlobalStats, 2019, pp. /browser-
market-share#monthly-201901-201905)
Enfocándonos en los 3 primeros puestos tenemos en:
12
Con estos datos podemos observar que los navegadores también están evolucionando a la
tecnología móvil en los buscadores esto nos ayudara a poder ver las tendencias que debemos
seguir en el futuro.
Tomando datos de todo el planeta del ultimo año 2018 – 2019 según (GlobalStats, 2019, pp.
platform-market-share/desktop-mobile/worldwide/#monthly-201801-201903)
13
Figura 3. Datos Estadísticos de Tecnologías Móviles vs Escritorio
Fuente: (GlobalStats, 2019)
Los siguientes datos serán obtenidos de Bond Capital que es fondo de inversiones que realiza
informes anuales sobre las tendencias de internet, cabe recalcar que la autora de estos estudios
es Mary Meeker.
Por primera vez en la historia internet tiene una penetración mayor a 50%, esto quiere
decir que más de la mitad de personas del planeta están conectadas a internet.
14
Figura 4. Penetración de internet mayor al 50%
Fuente: (Makeer, 2019)
15
Figura 5. Venta de Smartphone disminuye en -4% y el Sistema Operativo líder es Android
Seguido por IOS
Fuente: (Makeer, 2019)
16
Figura 6. Usuarios Conectados a Internet por Regiones
Fuente: (Makeer, 2019)
17
Este grafico es más específico donde nos muestra el top de países más conectados a
internet y los no conectados, donde podemos observar que china lidera y obtuvo un
resultado muy lejano a los demás.
18
4 Aplicación web progresiva
4.1 Definición
Las aplicaciones web progresivas son aquellas aplicaciones web que son rápidas, atractivas,
no solo es un framework, herramienta o palabra de moda elegante, sino que es una mentalidad
de mejora constante al aprovechar las API modernas de los navegadores, lo que genera
satisfacción para cada usuario. (Hajian, 2019, p. 1)
Según (Hajian, 2019, pp. 1-2) sin importar con que framework se elija trabajar, ni con que el
lenguaje que se elija, las aplicaciones web progresivas deben tener características especiales:
Conectividad independiente: Ya sea sin red o con una conexión lenta e inestable la
aplicación debe continuar funcionando.
Seguro: La seguridad es una de las prioridades más altas, es por eso que cada PWA
debe alojarse en un servidor HTTPS.
19
Progresivo: Independientemente del navegador o dispositivos nuestra aplicación
podrá evolucionar y adoptar nuevas características y así brindar mejor experiencia de
usuario.
Según (Love, 2018, p. 21) para la creación inicial de las aplicaciones web progresivas se
necesitó 3 principales características básicas que son:
(Love, 2018, pp. 23-24) Nos muestra algunos datos sobre una de las primeras empresas que
apoyaron y creyeron en las aplicaciones web progresivas, estos datos con el objetivo de poder
validar su apoyo a esta tecnología.
Una de las primeras empresas que invirtió en las aplicaciones web progresivas es “Flipkart”,
se dedica al comercio electrónico con sede en Bengaluru – India. Quienes construyeron su
aplicación web progresiva y obtuvieron los siguientes resultados:
20
4.4 Ventajas de una aplicación web progresiva
En el libro de (O'Reilly Media, 2017, pp. 14-17) nombra las siguientes ventajas:
Las aplicaciones web progresivas no dependen de la conexión del usuario como lo son los
sitios web tradicionales, pueden proporcionar una experiencia de usuario con todas las
funciones aunque estén fuera de línea, en línea o sufren de conexión no confiable.
Usando Service Worker podemos crear sitios que se inicien en un instante, ya sea que el
usuario tenga una conexión muy rápida, una conexión 2G no confiable o incluso ninguna
conexión, los sitios pueden cargarse en milisegundos incluso más rápido que las aplicaciones
nativas.
Las aplicaciones web progresivas pueden enviar notificaciones a sus usuarios incluso después
de abandonar el sitio, estas notificaciones ofrecen una gran oportunidad para volver a
participar con los usuarios, las notificaciones tienen una sensación completamente nativa y
son indistinguibles de las notificaciones de aplicaciones nativas.
Una vez que el usuario ha mostrado interés en su aplicación web progresiva, el navegador le
sugerirá automáticamente que agregue un acceso directo a su pantalla de inicio, esta tampoco
se debe distinguir de ninguna aplicación nativa.
21
4.4.5 Interfaz nativa.
Las aplicaciones web progresivas lanzadas desde la pantalla de inicio pueden tener un aspecto
totalmente nativo. Pueden tener una pantalla de bienvenida mientras carga, se puede iniciar
en modo pantalla completa, sin el navegador e incluso pueden bloquearse en una orientación
de pantalla específica.
Tomarse unos minutos para entender cómo funcionan las tecnologías es vital y también para
así comprender su potencial.
Según (Magno, 2013, pp. 29-30) la próxima versión de Twitter Bootstrap framework es
Mobile First es una solución elegante para el desarrollo FrontEnd, este hito no es solo técnico
sino estratégico, sigue el paradigma actual de diseño para la web, es considerado el diseño
del futuro.
Los navegadores móviles están implementando el soporte a los nuevos HTML5 y CSS3 ya
que vivimos en un momento donde el uso del móvil está aumentando considerablemente.
Hay muchas formas de utilizar Bootstrap, puede personalizar y ampliar componentes desde
la edición del código fuente, creando así un nuevo diseño para los navegadores porque no
necesita definir elementos básicos de la interfaz desde cero, como botones, fuentes, insignias
para cubrir los elementos de interfaz más comunes.
22
4.5.2 Service Worker
Los Service Worker introducen una capa, y mediante un script pueden registrarse para
controlar una o más páginas de su sitio. Una vez instalado esta se aloja en cualquier ventana
o pestaña del navegador, desde este lugar una Service Worker puede escuchar y actuar en los
eventos de todas las páginas que están bajo su control en segundo plano. (O'Reilly Media,
2017).
Esto significa que hay una capa entre la página y la web que recibe las respuestas del servidor
web y es así que toda la información necesaria puede ser almacenada en un cache del
dispositivo.
23
Figura 9. Navegador con el Service Worker Almacenando Datos en la Cache sin conexion
a Internet
Fuente: (O'Reilly Media, 2017)
Observando esta lógica significa que incluso si el usuario cerró las pestañas que ejecutan su
aplicación en su navegador, todavía hay una capa que se comunica con su servidor. Es así
que podemos observar que el Service Worker es el corazón de una aplicación web progresiva.
5.1 Definición
Las aplicaciones Angular de una sola página se encuentran en una posición privilegiada para
beneficiarse de los Service Worker. Angular a partir de su versión 5.0.0 se envió con una
implementación del Service Worker, que está diseñado para optimizar la experiencia de
usuario.
24
5.2 Por qué usar Angular
Reusable, fácil de mantener y Modular (MVC): Estos tres aspectos permite a los
desarrolladores ser más productivos, podemos crear nuestros propios componentes
reutilizables esto nos permite ser más rápidos en un mundo donde las metodologías
agiles predominan.
Integración con otros framework: Angular se puede integrar con otros framework,
librerías, bibliotecas, plugings.
5.3 Fundamentos
5.3.1 Arquitectura
25
El patrón de diseño MVC es uno de los más populares en la industria de desarrollo de
aplicaciones empresariales, el concepto de las tres es el siguiente:
La separación de capas nos permite modular nuestras aplicaciones lo cual hace al código más
flexible, más fácil de mantener y manejar.
5.3.2 Módulos
Una aplicación angular normalmente contiene muchos módulos funcionales, cada aplicación
angular tiene un módulo raíz llamada appModule, es una característica de angular que cuenta
con su propio sistema modular el cual declara un contexto de compilación para un conjunto
de capacidades estrechamente relacionadas.
Los NgModules pueden importar funcionalidades a otros módulos y a la vez permitir que los
otros módulos sean exportados, esta forma de trabajar con módulos ayuda a gestionar el
desarrollo de aplicaciones complejas además que permite cargar solo los módulos que se
utilizaran lo cual minimiza en el tiempo de ejecución. (Google, angular.io, 2019).
5.3.3 Componentes
Cada aplicación angular consta con al menos un componente que conecta una jerarquía de
componentes con el DOM de la web. Cada componente define una clase que contiene datos
y lógica de la aplicación, estos se asocian con una plantilla HTML, también un decorador
identifica la clase inmediatamente debajo de ella como un componente y proporciona la
plantilla y los metadatos específicos “@component”
26
Cabe recalcar que los componentes cuentan con decoradores representados por una arroba
que son funciones que modifican las clases de JavaScript de este modo angular define una
cantidad de decoradores que adjuntan tipos específicos de metadatos. (Google, angular.io,
2019).
Una plantilla es HTML este combinado con angular es modificado por las directivas que
proporcionan lógica al programa y van de la mano con el enlace de datos.
Según la lógica de angular antes que se muestre la vista se evalúa las directivas y resuelve la
sintaxis de la plantilla junto con los datos de la aplicación. (Google, angular.io, 2019)
27
5.3.6 Enrutamiento
Angular es posible configurar las rutas por mapeo a los componentes, hay 3 componentes
principales que se utiliza para configurar el enrutamiento. (Google, angular.io, 2019).
Estas opciones están detalladas en el manifiesto, este archivo manifest se genera a partir de
un archivo de configuración generado por el CLI llamado ngsw-config.json. (Google,
angular.io, 2019).
28
5.4.1 Requisitos previos
Su aplicación debe ejecutarse en un navegador web que soporte los Service Worker,
actualmente estos son compatibles con las últimas versiones de Chrome, Firefox, Edge,
Safari, Opera y Samsung internet.
Además se reitera que para que los Service Worker se registren correctamente deben acceder
a la aplicación a través del protocolo HTTPS y no HTTP, la única excepción a esta regla es
cuando la aplicación acceda al local host esto para facilitar el desarrollo local.
Para la ejecución del caso de estudio el cual es convertir una aplicación web a una aplicación
web progresiva con Angular es necesario utilizar Angular CLI y sus requerimientos, librerías
CSS o Bootstrap para la parte visual, junto con su Service Worker en la configuración del
navegador, aunque no es la única opción para crearla es bastante mantenible, tener en cuenta
la estructura y modificaciones realizadas en los archivos del proyecto y finalmente como
debemos ejecutar una aplicación web progresiva.
$ node –v
$ npm –v
Caso contrario puede visitar el sitio web de node en: https://nodejs.org y descargar la última
versión basada en su Sistema Operativo.
29
Figura 10. Página Oficial para Instalación de NodeJS
Fuente: (Foundation, n.d.)
30
6.2 Instalando Chrome.
Aunque para crear una aplicación web progresiva que funcionara independientemente de los
navegadores, nos limitaremos a usar Chrome y sus herramientas de desarrollo y depurar el
Service Worker así como otras características de una aplicación web progresiva como el Web
App Manifest y nuestro Service Worker.
31
6.3 Instalando Angular CLI
El CLI es la interfaz de línea de comandos y angular tiene su propio CLI especializado para
recibir órdenes y así crear nuestro proyecto, primeramente debemos instalar el CLI de angular
globalmente ejecutando los siguientes comandos en la consola.
En esta parte del proyecto creamos un nuevo proyecto Angular normal llamado países, con
el siguiente comando:
$ ng new paises
Una vez ejecutado este comando se creara automáticamente la aplicación gracias al Angular
CLI como observamos en la siguiente imagen.
32
Figura 12. Instalación de Nuevo Proyecto Angular
Fuente: Elaboración Propia
33
Una vez creado el proyecto deberá crear un conjunto de carpetas con las siguientes características:
Una vez creado el proyecto pasamos a ejecutarlo para verificar si se realiza correctamente con el
siguiente comando:
$ ng serve –o
34
Figura 14. Pantalla de Verificación de Creación de Nuevo Proyecto Angular
Para añadir la librería de Bootstrap a nuestra aplicación angular teniendo en cuenta siempre la
tendencia Mobile-first, deberemos agregar el estilo CSS a nuestro proyecto de la siguiente dirección:
https://getbootstrap.com/docs/4.3/getting-started/introduction/
Esto en index.html
35
Luego agregamos la librería anímate.css, en la carpeta assets donde se colocan los archivos estáticos
creamos una carpeta llamada “css” y ahí dentro un archivo anímate.css y copiamos el contenido
descargado y finalmente lo importamos en el index.css al igual que Bootstrap.
Fuente: (https://daneden.github.io/animate.css/)
Luego se integrara la lógica del sistema, que son los componentes, servicios, configuración
de rutas.
$../paises>ng g c pages/pais
$../paises>ng g c pages/paises
36
$../paises>ng g s services/paises
$../paises>ng g m AppRouting – flat - crea el modulo en la carpeta app
Una vez ya realizada la logica del negocio en el sistema y tener una aplicación web angular
normal se realizara la conversion a una aplicación web progresiva.
Para añadir las funcionalidades de una aplicación web progresiva de una forma rapida se
debe instalar el paquete oficial con el CLI de angular, este paquete automatiza varias
caracteristicas de las aplicaciones web progresivas.
37
Esta realizara la instalación descargando paquetes de npm, configuraciones, creara y
actualizara algunos archivos.
38
Figura 18. Comparación de los archivos creados para la Aplicación web
progresiva.
39
En el archivo “ngsw-config.json” podemos configurar comportamientos relacionados con el
almacenamiento en cache de los recursos particulares de la aplicación.
40
En el archivo “app.module.ts” se añadió el “ServiceWorkerModule” lo que nos permite
inyectar y registrar el Service Worker en el navegador.
En este punto se tiende a pensar que ya las funcionalidades de la aplicación web progresiva
están funcionando cosa que no es cierto, lo que debemos hacer es realizar el Build de
producción, porque ahí se habilitaran las configuraciones del ng-serviceWorker.
Figura 22. Realizando el comando BUILD para que podamos Realizar los Archivos de
producción del Proyecto
41
Y automáticamente creara una carpeta en la raíz llamada “dist” que tendrá información
adicional realizado por la configuración del CLI de angular esta ya estará lista para subir aun
hosting o la despleguemos localmente.
En esta parte necesitaremos instalar un servidor local para poder ejecutar la aplicación
web progresiva, por practicidad instalaremos un servidor ligero de node llamado
“http-server” el cual permite desplegar aplicaciones rápidamente simula un simple
hosting montado en nuestra máquina.
42
$ http-server
Esto automáticamente levantara el servidor con la aplicación web progresiva por defecto en
la siguiente dirección: “localhost:8080”
Figura 25. Ventana del navegador mostrando que el Service Worker está Instalado
Correctamente.
43
En la pestaña de la aplicación de las herramientas de desarrollo del navegador podremos
observar como el estado del Service Worker se encuentra activo.
Figura 26. Pantalla del Navegador Mostrando la Pestaña del Archivo Manifest.
Finalmente una vez se realicen los pasos verificamos que la aplicación se ejecuta
correctamente con modo offline y se guardan los datos en la cache del navegador.
44
7 Conclusiones
Después de haber concluido con la investigación sobre las aplicaciones web progresivas,
considerando conceptos, tecnologías, uso de herramientas para convertir una aplicación
normal a una aplicación web progresiva, se puede concluir lo siguiente:
Sobre el caso de estudio se pudo evidenciar que Angular junto con el Service Worker
beneficia considerablemente optimizando la experiencia de usuario a la hora de crear
las aplicaciones web progresivas, disponiendo distintas características sobresalientes
como el uso sin conexión a internet, la experiencia responsiva y la carga de manera
fluida.
45
Bibliografía
Arizmendi, P. (2018). AngularJS . Paiminix.
Hajian, M. (2019). Progressive Web Apps with Angular . Oslo, Noruega: Apress.
Magno, A. (2013). Mobile First Bootstrap. Birminghan - Inglaterra: Packt Publishing Ltd.
O'Reilly Media, I. (2017). Building Progressive Web Apps: Bringing the power of Native to the
browser. Sebastopol - California: Tal Ater.
46