Cómo ZDF creó una AWP de video con el modo sin conexión y oscuro

Descubre cómo ZDF creó una app web progresiva (AWP) con funciones modernas, como la compatibilidad sin conexión, la capacidad de instalación y el modo oscuro.

Martin Schierle
Martin Schierle
Scott Friesen
Scott Friesen

Cuando la emisora ZDF consideraba rediseñar su tecnología de frontend decidieron analizar con más detalle las apps web progresivas de su sitio de transmisión ZDFmediathek. Agencia de desarrollo cellular asumió el desafío de crear una plataforma que está a la par de las apps de ZDF para iOS y Android específicas de la plataforma. El La AWP ofrece facilidad de instalación, reproducción de video sin conexión, animaciones de transición y una el modo oscuro.

Agrega un service worker

Una característica clave de una AWP es la compatibilidad sin conexión. Para el ZDF, la mayor parte del trabajo pesado lo realiza Workbox, un conjunto de bibliotecas y módulos de Node.js que facilitan la compatibilidad con diferentes estrategias de almacenamiento en caché. El La AWP de ZDF se compiló con TypeScript y React, por lo que usa la biblioteca de Workbox. ya integrado en create-react-app para almacenar en caché los recursos estáticos. Esto permite que la aplicación se enfoque en hacer que la configuración contenido disponible sin conexión; en este caso, los videos y sus metadatos.

La idea básica es bastante simple: recuperar el video y almacenarlo como un BLOB en IndexedDB Luego, durante la reproducción, escucha eventos en línea o sin conexión y cambia a la versión descargada cuando el dispositivo se desconecta.

Lamentablemente, todo resultó ser un poco más complejo. Una de las preguntas del proyecto era usar el reproductor web oficial de ZDF, que no brinda sin conexión. Toma un Content ID como entrada, se comunica con la API de ZDF y reproduce el video asociado.

Aquí es donde una de las funciones más poderosas de la web viene al rescate: service workers.

El service worker puede interceptar las diferentes solicitudes que realiza el jugador y responder con los datos de IndexedDB. Esto permite agregar con transparencia sin tener que cambiar ni una sola línea del código del jugador.

Dado que los videos sin conexión suelen ser muy grandes, una gran pregunta es cuántos de ellos se pueden almacenar en un dispositivo. Con la ayuda de StorageManager API en la que la app puede estimar la espacio disponible e informar al usuario cuando no hay suficiente espacio, incluso para comenzar la descarga. Lamentablemente, Safari no aparece en la lista de navegadores para implementar esta API y, al momento de escribir este documento, no había información información sobre cómo otros navegadores aplicaron cuotas. Por lo tanto, el equipo escribió pequeña utilidad para probar el comportamiento varios dispositivos. Por ahora, un resumen artículo que resume todas las más detalles.

Cómo agregar un mensaje de instalación personalizado

La AWP de ZDF ofrece un flujo de instalación personalizado en la app y les pide a los usuarios que instalar la app apenas quieran descargar su primer video. Este es un un buen momento para solicitar la instalación porque el usuario expresó una clara intención de usar la aplicación sin conexión.

Invitación de instalación personalizada. El mensaje de instalación personalizado se activa cuando se descarga un video para consumo sin conexión.
El mensaje de instalación personalizado se activa cuando se descarga un video para consumo sin conexión.

Cómo crear una página sin conexión para acceder a las descargas

Cuando el dispositivo no está conectado a Internet y el usuario navega a un que no está disponible en el modo sin conexión, se muestra una página especial que una lista de todos los videos que se han descargado previamente o (en caso de que no se haya no se haya descargado aún) una breve explicación de la función sin conexión.

Página sin conexión que muestra todo el contenido disponible para mirar sin conexión. Página sin conexión que muestra que no hay contenido disponible para mirar sin conexión.
Página sin conexión que muestra todo el contenido disponible para mirarlo sin conexión.

Cómo usar la velocidad de carga de fotogramas para funciones adaptables

Para ofrecer una experiencia del usuario enriquecida, la AWP de ZDF incluye algunas transiciones sutiles que suceden cuando el usuario se desplaza o navega. En dispositivos de gama baja, como las animaciones suelen tener el efecto opuesto y hacen que la app funcione con lentitud menos de respuesta si no se ejecutan a 60 fotogramas por segundo. Para llevar esto al la app mide la velocidad de fotogramas real a través de requestAnimationFrame() mientras la aplicación se carga e inhabilita todas las animaciones cuando el valor cae por debajo de una umbral determinado.

const frameRate = new Promise(resolve => {
  let lastTick;
  const samples = [];

  function measure() {
    const tick = Date.now();
    if (lastTick) samples.push(tick - lastTick);
    lastTick = tick;
    if (samples.length < 20) requestAnimationFrame(measure);
    else {
      const avg = samples.reduce((a, b) => a + b) / samples.length;
      const fps = 1000 / avg;
      resolve(fps);
    }
  }
  measure();
});

Incluso si esta medición proporciona solo una indicación aproximada de y varía con cada carga, sigue siendo una buena base para la toma de decisiones. Vale la pena mencionar que, según el caso de uso, hay otras técnicas para la carga adaptable que los desarrolladores pueden implementar. Una gran ventaja de este enfoque es que está disponible en todas las plataformas.

Modo oscuro

Una función popular para las experiencias modernas en dispositivos móviles es modo oscuro. Especialmente cuando Mirar videos en un ambiente con poca luz. Muchas personas prefieren una IU con luz tenue. La AWP de ZDF no solo proporciona un interruptor que permite a los usuarios alternar entre una luz y una con el tema oscuro, también reacciona a los cambios de las preferencias de color de todo el SO. Por aquí la aplicación cambiará automáticamente su apariencia en los dispositivos en los que se haya configurado una para cambiar la base del tema según la hora del día.

Resultados

La nueva app web progresiva se lanzó de manera silenciosa como versión beta pública en marzo de 2020 y recibió muchos comentarios positivos desde entonces. Si bien la fase beta continúa, la AWP seguirá ejecutándose bajo su propio dominio temporal. Si bien el AWP no se promocionó públicamente; la cantidad de usuarios crece constantemente. Muchos son de Microsoft Store, que permite que los usuarios de Windows 10 descubran las AWP y, luego, instalarlas como apps específicas de la plataforma.

Próximos pasos

ZDF planea seguir agregando funciones a su AWP, incluido el acceso para la visualización en múltiples dispositivos y plataformas, y notificaciones push.