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

Hemos aprendido mucho desde que las notificaciones y los mensajes push llegaron a Chrome. Un comentario específico sobre los dispositivos de escritorio era 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á automáticamente la notificación. Sin embargo, ahora vivimos en un mundo con service worker: en el que las aplicaciones web pueden permanecer más allá de la vida útil de una ventana y los service worker se suspendan lo más rápido posible para ahorrar recursos. Esto significa que necesitamos otra manera de crear una buena experiencia para los usuarios.

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

Una notificación tiene asociada una marca de preferencia de interacción obligatoria que no está configurada inicialmente. Cuando se configura, indica que, en dispositivos con una pantalla lo suficientemente grande, la notificación debería seguir disponible hasta que el usuario la active o la descarte.

Esto puede parecer extraño, pero lo que implica que, a menos que se indique lo contrario, la notificación debe quitarse 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 explícitamente y se configure como true, todas las notificaciones de computadoras de escritorio se descartarán después de aproximadamente 20 segundos. Lo interesante es que, recientemente, Chrome 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 service worker.

En Chrome para Android, debido a que las notificaciones están minimizadas 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.