Interação necessária para notificação: uma UX de notificação mais suave no computador

Aprendemos muito desde que as Notificações e as Mensagens push foram lançadas no Chrome. Um um feedback específico sobre dispositivos computadores foi que as notificações ficaria visível e visível na tela do usuário até ser dispensado ativamente por ele.

Quando a página está aberta, é possível criar um cronômetro JavaScript simples Feche a notificação. Mas agora vivemos em um mundo com service workers: onde os apps da Web podem que passam do ciclo de vida de uma janela e os service workers são colocados em suspensão o mais rápido possível para economizar recursos. Isso significa que precisamos de outra maneira de criar uma boa experiência para os usuários.

A especificação de notificação foi atualizada recentemente para dar ao desenvolvedor a capacidade de indicam que a notificação não deve ser dispensada automaticamente pelo sistema.

Uma notificação tem uma sinalização de preferência de interação associada que é necessária não definido. Quando definido, indica que, em dispositivos com uma tela grande o suficiente, a notificação deve permanecer prontamente disponível até que o usuário ative ou dispense a notificação.

Isso pode parecer estranho, mas significa que, a menos que seja dito o contrário, a notificação deve ser removido da visualização após um curto período de tempo.

O Chrome 47 (Beta em outubro de 2015) agora é compatível com a opção requireInteraction. A menos que seja explicitamente fornecidos e definidos como true, todas as notificações no computador serão dispensadas após aproximadamente 20 segundos. A parte interessante é que o Chrome tem Acabamos de remover a Central de Notificações de todas as plataformas de computador (exceto do ChromeOS). Isso significa que as notificações minimizadas são consideradas dispensadas e não podem ser acessadas em uma chamada para getNotifications em um service worker.

No Google Chrome para Android, como as notificações são minimizadas na área da bandeja de notificações, a A opção requireInteraction será ignorada.

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'
        });
        });
    }
    });
}

Teste a demonstração.

.