Como usar a API Notifications

Ernest Delgado
Ernest Delgado

Introdução

A API Notifications permite mostrar notificações ao usuário sobre determinados eventos, tanto de forma passiva (novos e-mails, tweets ou eventos da agenda) quanto nas interações do usuário, independente da guia em foco. Há uma especificação de rascunho, mas não está em nenhum padrão.

Você pode seguir estas etapas simples para implementar notificações em apenas alguns minutos:

Etapa 1: verificar o suporte à API Notifications

Verificamos se webkitNotifications é compatível. O nome webkitNotifications é porque ele faz parte de uma especificação de rascunho. A especificação final terá uma função notifications().

// check for notifications support
// you can omit the 'window' keyword
if (window.webkitNotifications) {
console.log("Notifications are supported!");
}
else {
console.log("Notifications are not supported for this Browser/OS version yet.");
}

Etapa 2: permitir que o usuário conceda permissões para que um site mostre notificações

Qualquer um dos construtores que mencionamos vai gerar um erro de segurança se o usuário não tiver concedido manualmente permissões ao site para mostrar notificações. Para gerenciar a exceção, use uma instrução try-catch, mas também o método checkPermission para a mesma finalidade.

document.querySelector('#show_button').addEventListener('click', function() {
if (window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
// function defined in step 2
window.webkitNotifications.createNotification(
    'icon.png', 'Notification Title', 'Notification content...');
} else {
window.webkitNotifications.requestPermission();
}
}, false);

Se o aplicativo da Web não tiver permissões para mostrar notificações, o método requestPermission vai mostrar uma barra de informações:

A barra de informações de permissão de notificações no Google Chrome
A barra de informações da permissão de notificações no Google Chrome.

No entanto, é muito importante lembrar que o método requestPermission funciona apenas em manipuladores de eventos acionados por uma ação do usuário, como eventos de mouse ou teclado, para evitar barras de informações não solicitadas. Nesse caso, a ação do usuário é o clique no botão com o ID "show_button". O snippet acima nunca vai funcionar se o usuário não tiver clicado explicitamente em um botão ou link que aciona o requestPermission em algum momento.

Etapa 3: anexar listeners e outras ações

document.querySelector('#show_button').addEventListener('click', function() {
  if (window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
    // function defined in step 2
    notification_test = window.webkitNotifications.createNotification(
      'icon.png', 'Notification Title', 'Notification content...');
    notification_test.ondisplay = function() { ... do something ... };
    notification_test.onclose = function() { ... do something else ... };
    notification_test.show();
  } else {
    window.webkitNotifications.requestPermission();
  }
}, false);

Neste ponto, convém encapsular todos esses eventos e ações criando sua própria classe de notificação para manter o código mais limpo, embora isso esteja fora do escopo deste tutorial.