Una PWA para empresas es una aplicación web que se instala en el móvil o el ordenador, abre a pantalla completa, sigue funcionando sin conexión gracias a un service worker y envía notificaciones push, también en iPhone desde iOS 16.4. Para muchas empresas de Madrid sustituye a una app nativa en herramientas internas y portales de cliente. La planteamos dentro de nuestro desarrollo de apps móviles en Madrid.
Una app nativa obliga a pasar la revisión de cada tienda y a convivir con usuarios que nunca actualizan. Si la herramienta es interna o la usan clientes que llegan por un enlace, ese coste se paga en cada versión y retrasa correcciones que en la web saldrían en minutos.
Al terminar sabrás si tu caso cabe en una PWA o pide una app nativa, una decisión que encaja con la guía técnica para elegir entre app móvil y aplicación web.
Qué es una PWA para empresas
Una PWA (Progressive Web App) para empresas es una aplicación web que el navegador puede instalar como una app gracias a dos piezas estándar: un manifest en JSON que describe su identidad y su modo de pantalla, y un service worker que intercepta las peticiones de red. Se publica en tu dominio, sin tiendas, y se actualiza al recargar.
La diferencia con una web adaptada al móvil ya la cubre la comparativa entre app nativa y web responsive; aquí importa lo que la PWA añade encima.
Cómo funcionan el service worker y el manifest
El service worker es un script que el navegador ejecuta en un hilo aparte de la página, sin acceso al DOM, y que actúa como intermediario entre la aplicación y la red. Solo se registra en páginas servidas por HTTPS.
- Manifest: declara nombre, iconos, URL de inicio y modo `standalone`. Chrome lo exige, junto con HTTPS, para ofrecer la instalación.
- Evento install: guarda en caché los archivos que la app necesita para arrancar sin red.
- Evento activate: borra las cachés de versiones anteriores para que nadie trabaje con código viejo.
- Evento fetch: decide por tipo de recurso si responde desde la red o desde la caché.
La elección de estrategia por tipo de dato y la resolución de conflictos al reconectar siguen los mismos patrones del desarrollo offline-first con sincronización y caché.
PWA en iOS y Android: instalación y notificaciones push
Safari admite notificaciones push web desde iOS y iPadOS 16.4 en las web apps añadidas a la pantalla de inicio, según el anuncio de Web Push para web apps de WebKit de febrero de 2023.
- iPhone y iPad: Instalación: el usuario la añade desde Safari con "Añadir a pantalla de inicio", así que tu web debe explicarle el gesto. Push: solo en la web app instalada, con el permiso pedido tras un toque del usuario y el manifest en modo `standalone` o `fullscreen`.
- iOS 26: Instalación: toda web añadida a la pantalla de inicio abre como web app por defecto, como detalla la nota de WebKit sobre Safari 26. El usuario puede desactivarlo y dejarla como marcador.
- Android: Instalación: Chrome ofrece instalar cuando la web cumple HTTPS y el manifest está completo.
En el servidor, las colas de envío y la limpieza de suscripciones caducadas funcionan igual que en la arquitectura de notificaciones push en apps móviles.
Cuándo una PWA sustituye a una app nativa
Una PWA sustituye a una app nativa cuando el valor está en los datos y los procesos, y no en el hardware del teléfono ni en la presencia en tiendas.
- Cuándo sí: herramientas internas, portales de cliente, reservas y catálogos B2B. También cuando el usuario llega por un enlace o un QR, o cuando publicas cambios cada semana.
- Cuándo no: necesitas hardware que Safari no expone a la web, tareas continuas con la app cerrada o captar usuarios desde la App Store y Google Play, con sus reglas de publicación en App Store y Google Play.
- Caso hipotético: imagina una empresa de mantenimiento de Madrid con 25 técnicos que rellenan partes en sótanos sin cobertura. Una PWA con caché local lo cubre sin tiendas.
Si el análisis apunta a nativa o multiplataforma, los criterios por sector están en cómo plantear apps móviles para empresas de Valencia. El contenido de la PWA puede venir de un CMS headless para tu web corporativa y sus altas de cliente, de formularios web que crean el lead en el CRM.
CodeZone Pro Tip: este service worker sirve las páginas desde la red con copia sin conexión, los archivos estáticos desde caché y muestra las notificaciones push que envía tu servidor.
// Cambia la versión en cada despliegue: activate borrará la caché anterior
const VERSION = "app-v12";
const PRECACHE = ["/", "/offline.html", "/app.css", "/app.js", "/icon-192.png"];
self.addEventListener("install", (event) => {
event.waitUntil(caches.open(VERSION).then((c) => c.addAll(PRECACHE)));
self.skipWaiting(); // la nueva versión toma el control sin esperar a cerrar pestañas
});
self.addEventListener("activate", (event) => {
event.waitUntil(caches.keys().then((ks) => Promise.all(ks.filter((k) => k !== VERSION).map((k) => caches.delete(k)))));
self.clients.claim();
});
self.addEventListener("fetch", (event) => {
const req = event.request;
if (req.method !== "GET") return; // los envíos de datos nunca se sirven desde caché
// Páginas: red primero para no enseñar precios o stock antiguos.
// Estáticos versionados: caché primero, ya que cambian de nombre en cada despliegue
event.respondWith(req.mode === "navigate"
? fetch(req).catch(() => caches.match("/offline.html"))
: caches.match(req).then((hit) => hit || fetch(req)));
});
self.addEventListener("push", (event) => {
const data = event.data ? event.data.json() : { title: "Aviso", body: "", url: "/" };
// Cada push muestra una notificación visible: no diseñes envíos silenciosos
event.waitUntil(self.registration.showNotification(data.title, { body: data.body, icon: "/icon-192.png", data: { url: data.url } }));
});
self.addEventListener("notificationclick", (event) => {
event.notification.close();
event.waitUntil(self.clients.openWindow(event.notification.data.url));
});Con este archivo, quien pierde la cobertura sigue viendo la app en lugar de un error, y cada despliegue llega a todos en la siguiente apertura, sin esperar a que actualicen.
Lo Que Pagas Si Eliges App Nativa por Inercia
Elegir nativa sin necesitarla multiplica el mantenimiento: dos plataformas que revisar en cada tienda y versiones antiguas activas durante meses. Una PWA bien diseñada concentra el presupuesto en el producto y deja la puerta abierta a una app nativa cuando un requisito real la justifique.
En Codezone analizamos tus procesos y te decimos qué parte cabe en una PWA y cuál necesita nativa. Cuéntanos qué app tienes en mente y te proponemos la arquitectura.