Files
checklist/frontend/PWA-UPDATE-GUIDE.md
ronalds a692948a6f Sistema de Actualización PWA Implementado (v1.0.87)
Frontend (v1.0.87)
Service Worker (public/service-worker.js)
 Cache versionado dinámico: ayutec-v1.0.87
 Estrategia Network-First con fallback a cache
 Auto-limpieza de caches antiguos en activación
 Skip waiting para activación inmediata
 Soporte para mensaje SKIP_WAITING desde cliente
Detección de Actualizaciones (App.jsx)
 Registro automático de Service Worker
 Listener de updatefound para detectar nuevas versiones
 Listener de controllerchange para recarga automática
 Estado updateAvailable y waitingWorker
Modal de Actualización
 Diseño grande y llamativo con animación bounce
 Overlay bloqueante (z-index 9999, no se puede cerrar)
 Botón enorme: "🚀 ACTUALIZAR AHORA"
 Gradiente indigo/purple, responsive
 Texto claro: "Nueva versión disponible"
 Recarga automática al actualizar
PWA Manifest (site.webmanifest)
 Agregado start_url y scope
 Configurado orientation: portrait
 Display standalone para app nativa
HTML Metatags (index.html)
 theme-color para barra de navegación
 apple-mobile-web-app-capable para iOS
 mobile-web-app-capable para Android
 Viewport con user-scalable=no para PWA
Automatización
 Script PowerShell update-version.ps1:
Incrementa versión automáticamente (patch)
Actualiza package.json
Actualiza service-worker.js
Sincroniza ambos archivos
 Guía completa PWA-UPDATE-GUIDE.md
Flujo de Actualización
Desarrollador ejecuta update-version.ps1
Build y deploy de nueva versión
Usuario abre la app
Service Worker detecta nueva versión
Modal aparece automáticamente bloqueando UI
Usuario presiona "ACTUALIZAR AHORA"
Service Worker se activa
Página se recarga automáticamente
Usuario usa nueva versión
Backend (v1.0.84)
Sin cambios
Ahora la PWA se actualiza automáticamente mostrando un modal imposible de ignorar! 🚀📱
2025-11-30 23:11:33 -03:00

4.6 KiB
Raw Blame History

Sistema de Actualización PWA - AYUTEC

🚀 Características

  • Detección automática de nuevas versiones
  • Modal de actualización grande y visible
  • Service Worker con estrategia Network-First
  • Cache inteligente para funcionamiento offline
  • Actualización forzada al usuario cuando hay nueva versión

📱 Instalación como PWA

En Android/iOS:

  1. Abre la app en Chrome/Safari
  2. Toca el menú (⋮)
  3. Selecciona "Agregar a pantalla de inicio"
  4. Confirma la instalación

En Desktop:

  1. Abre la app en Chrome/Edge
  2. Haz clic en el ícono de instalación () en la barra de direcciones
  3. Confirma "Instalar"

🔄 Proceso de Actualización

Para el Usuario:

  1. Cuando hay una actualización, aparece automáticamente un modal grande
  2. El modal muestra: "¡Nueva Actualización!"
  3. Botón grande: "🚀 ACTUALIZAR AHORA"
  4. Al presionar, la app se recarga con la nueva versión

Para el Desarrollador:

Opción 1: Script Automático (Recomendado)

cd frontend
.\update-version.ps1

Este script:

  • Incrementa automáticamente la versión patch (1.0.87 → 1.0.88)
  • Actualiza package.json
  • Actualiza public/service-worker.js

Opción 2: Manual

  1. Actualizar package.json:

    "version": "1.0.88"  // Incrementar número
    
  2. Actualizar public/service-worker.js:

    const CACHE_NAME = 'ayutec-v1.0.88';  // Mismo número
    
  3. Hacer build y deploy:

    npm run build
    docker build -t tu-registry/checklist-frontend:latest .
    docker push tu-registry/checklist-frontend:latest
    

🔧 Cómo Funciona

1. Service Worker

  • Registrado en App.jsx
  • Cache con nombre versionado: ayutec-v1.0.87
  • Estrategia: Network First, Cache Fallback
  • Al cambiar la versión, se crea nuevo cache

2. Detección de Actualización

// En App.jsx
registration.addEventListener('updatefound', () => {
  // Nueva versión detectada
  setUpdateAvailable(true)
})

3. Modal de Actualización

  • Overlay negro semi-transparente (z-index: 9999)
  • Modal animado con bounce
  • Botón grande con gradiente
  • No se puede cerrar - obliga a actualizar

4. Aplicación de Actualización

waitingWorker.postMessage({ type: 'SKIP_WAITING' });
// Activa el nuevo service worker
// Recarga la página automáticamente

📊 Versionado

Seguimos Semantic Versioning:

  • MAJOR: Cambios incompatibles (1.0.0 → 2.0.0)
  • MINOR: Nueva funcionalidad compatible (1.0.0 → 1.1.0)
  • PATCH: Correcciones de bugs (1.0.0 → 1.0.1)

El script update-version.ps1 incrementa automáticamente PATCH.

🧪 Probar Localmente

  1. Compilar en modo producción:

    npm run build
    npm run preview
    
  2. Simular actualización:

    • Abre la app en navegador
    • Incrementa versión en service-worker.js
    • Recarga la página (Ctrl+F5)
    • Debe aparecer el modal de actualización

🐛 Troubleshooting

El modal no aparece

  • Verifica que el service worker esté registrado (F12 → Application → Service Workers)
  • Asegúrate de cambiar el CACHE_NAME en service-worker.js
  • Desregistra el SW antiguo: Application → Service Workers → Unregister

La app no se actualiza

  • Fuerza actualización: Ctrl+Shift+R (hard reload)
  • Limpia cache del navegador
  • Verifica que la nueva versión esté deployada

PWA no se instala

  • Verifica que site.webmanifest esté accesible
  • Requiere HTTPS (excepto localhost)
  • Verifica íconos en /public/

📝 Checklist de Deploy

  • Incrementar versión con update-version.ps1
  • Verificar que ambos archivos tengan la misma versión
  • Hacer commit: git commit -m "chore: bump version to X.X.X"
  • Build de producción: npm run build
  • Build de Docker: docker build -t frontend:vX.X.X .
  • Push a registry
  • Deploy en servidor
  • Verificar que usuarios vean el modal de actualización

🎯 Mejores Prácticas

  1. Siempre incrementar versión antes de deploy
  2. Nunca reutilizar números de versión
  3. Probar localmente antes de deploy
  4. Documentar cambios en commit message
  5. Notificar a usuarios si es actualización crítica

🔐 Seguridad

  • Service Worker solo funciona en HTTPS
  • Manifest require start_url y scope correctos
  • Cache no almacena datos sensibles (solo assets estáticos)

📱 Compatibilidad

  • Chrome/Edge (Desktop y Mobile)
  • Safari (iOS 11.3+)
  • Firefox (Desktop y Mobile)
  • Samsung Internet
  • ⚠️ IE11 no soportado

Versión actual: 1.0.87 Última actualización: 2025-11-30