Joel A. Villarreal Bertoldi
Joel A. Villarreal Bertoldi
Compañeros inseparables. Casi como la pizza y la cerveza.
"It is now possible to provide a progressive, gradually enhanced experience across a wide array of browsers, using one markup document and a variety of different stylesheets"
"Inclusive Web Design for the Future" - Steve Champeon, SXSW 2003
Es decir: si se puede dar una mejor experiencia, ¡démosla!
A Progressive Web App uses
modern web capabilities to deliver
an app-like user experience. They
evolve from pages in browser tabs
to immersive, top-level apps,
maintaining the web's low friction
at every moment.
— Addy Osmani
Páginas que escapan de la pestaña del navegador para ofrecer una experiencia inmersiva de primera clase.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Funciona para todos los usuarios, sin importar el navegador que estén usando. Las PWAs se construyen en torno al paradigma de progressive enhancement.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Se ajustan a cualquier form factor (desktop, mobile, tablets, lo que el futuro traiga).
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Utilizando Service Workers las PWAs pueden operar en modo offline o en redes con una conexión de baja calidad.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Las PWAs emplean el modelo App Shell para ofrecer navegación e interacciones al estilo de una app nativa.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
A través de procesos de actualización servidos vía Service Workers, la PWA siempre está actualizada.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Las PWAs son servidas a través de HTTPS para asegurar la integridad del contenido ofrecido.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Las PWAs pueden ser encontradas por buscadores gracias a los W3C Manifests y al scope de registración de los Service Workers.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Las PWAs buscan la generación de hábitos de uso a través de características como Push Notifications.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Los usuarios pueden conservar un shortcut a la PWA en su home screen sin las complicaciones de una app store.
Progressive
Responsive
Connectivity independent
App-like
Fresh
Safe
Discoverable
Re-engageable
Installable
Linkable
Las PWAs se pueden compartir directamente a través de URLs con un proceso de instalación muy simple.
Chrome, Opera,
Firefox y PWAs:
un sólo corazón
(No hay soporte
para service
workers)
https://www.w3.org/TR/appmanifest/
{
"lang": "es",
"dir": "ltr",
"name": "MercadoLibre",
"description": "Compra y vende...",
"short_name": "MercadoLibre",
"icons": [{
"src": "icon/lowres.webp",
"sizes": "64x64",
"type": "image/webp"
},{
"src": "icon/lowres.png",
"sizes": "64x64"
}, {
"src": "icon/hd_hi",
"sizes": "128x128"
}],
"scope": "/meli/",
"start_url": "/meli/start.html",
"display": "fullscreen",
"orientation": "portrait",
"theme_color": "yellow",
"background_color": "whgite"
}
Es un archivo JSON que controla cómo la app se presenta al usuario en convivencia con otras apps, qué puede ejecutarse y de qué manera.
manifest.json
https://developers.google.com/web/updates/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android
(en el hipotético caso de que eso importara... yo me quedo ahí.)
Eso estaba en nuestra PWA, "GloboVuelos".
Son scripts que corren en segundo plano, sensibles a eventos e incluso a tráfico de red, activándose sólo en respuesta a alguno de estos casos.
Permiten el acceso a la Cache API.
Nuestra app está cacheada,
carga mucho más rápido,
sin necesidad de conexión.
Los datos del usuario están cacheados. ¡Puedo ver la fecha de salida de mi globo aerostático!
Herramientas:
sw-toolbox, sw-precache
(las notificaciones)
Permiten generar el hábito de usar la app, incluso fuera del navegador.
Requiere Web App Manifest + Service Worker.
Da acceso a la Push API.
¡OJO! Opera no tiene cerezas notificaciones todavía.
PWA es un paradigma que fomenta el acoplado de múltiples herramientas que resultan en una notoria mejora de la experiencia de usuario.
Un outbox para comunicarse con APIs en la nube, sensible a fallas de conectividad: intenta enviar datos a la API, y si falla, intenta más adelante, en segundo plano.
Permiten que el user-agent sincronice en el mejor momento de la manera menos disruptiva posible.
*en desarrollo
https://github.com/WICG/BackgroundSync/blob/master/explainer.md
https://webbluetoothcg.github.io/web-bluetooth/
El objetivo es lograr la especificación de una API que permita a una Web App comunicarse con otros dispositivos vía Bluetooth.
Algunos casos de uso: Web Apps que controlen dispositivos a la Fitbit, unificar en un dashboard distintas métricas de diversos dispositivos Bluetooth, publicidad a partir de datos, control de audio...
PWA, además, se ve enriquecido por otros paradigmas provenientes de la esfera de UX.
https://developers.google.com/web/tools/chrome-devtools/profile/evaluate-performance/rail
Response Animation Idle Load
First, Last, Invert, Play
https://aerotwist.com/blog/flip-your-animations/
https://github.com/addyosmani/app-shell
https://github.com/google/web-starter-kit
https://addyosmani.com/blog/getting-started-with-progressive-web-apps/
https://developers.google.com/web/progressive-web-apps
https://www.w3.org/TR/appmanifest/
App Shell: https://github.com/addyosmani/app-shell
Web Starter Kit: https://github.com/google/web-starter-kit
sw-precache: https://github.com/GoogleChrome/sw-precache/
¡Éxitos
y muchas
gracias!