Las notificaciones requierenInteraction: una experiencia del usuario más fluida para las notificaciones en computadoras de escritorio.

Aprendimos mucho desde que las notificaciones y los mensajes push llegaron a Chrome. Un comentario específico sobre los dispositivos de clase de computadoras de escritorio fue que las notificaciones permanecían visibles en la pantalla del usuario hasta que este las descartaba de forma activa.

Cuando la página está abierta, es posible crear un temporizador de JavaScript simple que cerrará la notificación automáticamente. Sin embargo, ahora vivimos en un mundo con service worker: en el que las apps web pueden sobrevivir al ciclo de vida de una ventana y los service workers se suspenden lo más rápido posible para ahorrar recursos. Esto significa que necesitamos otra forma de crear una buena experiencia para los usuarios.

Recientemente, se actualizó la especificación de notificaciones para que el desarrollador pueda indicar que el sistema no debe descartar la notificación automáticamente.

Una notificación tiene una marca de preferencia de interacción obligatoria asociada que, inicialmente, no se establece. Cuando se establece, indica que, en dispositivos con una pantalla lo suficientemente grande, la notificación debe permanecer disponible hasta que el usuario la active o descarte.

Esto puede parecer extraño, pero lo que implica es que, a menos que se indique lo contrario, la notificación debería desaparecer de la vista después de un período breve.

Chrome 47 (beta en octubre de 2015) ahora admite la opción requireInteraction. A menos que se proporcione de forma explícita y se establezca en true, todas las notificaciones en computadoras de escritorio se descartarán después de aproximadamente 20 segundos. Sin embargo, lo interesante es que Chrome recientemente quitó el Centro de notificaciones de todas las plataformas de escritorio (excepto ChromeOS), lo que significa que las notificaciones minimizadas se consideran descartadas y no se puede acceder a ellas en una llamada a getNotifications en un trabajador de servicio.

En Chrome para Android, como las notificaciones se minimizan en el área de la bandeja de notificaciones, se ignora la opción requireInteraction.

navigator.serviceWorker.register('sw.js');

function showNotifications() {
    Notification.requestPermission(function(result) {
    if (result === 'granted') {
        navigator.serviceWorker.ready.then(function(registration) {
        registration.showNotification('requireInteraction: true', {
            body: 'Requires interaction',
            icon: '../images/touch/chrome-touch-icon-192x192.png',
            requireInteraction: true,
            tag: 'require-interaction'
        });

        registration.showNotification('requireInteraction: false', {
            body: 'Does not require interaction',
            icon: '../images/touch/chrome-touch-icon-192x192.png',
            requireInteraction: false,
            tag: 'no-require-interaction'
        });
        });
    }
    });
}

Prueba la demostración.