As notificações push tornaram-se uma ferramenta poderosa para manter a proximidade com o usuário, enviando alertas e atualizações mesmo quando ele não está ativamente no seu site ou aplicação. A Web Push API possibilita exatamente isso: enviar notificações diretamente para o navegador, oferecendo uma experiência semelhante a aplicativos mobile, mas sem a necessidade de instalação de nenhum app específico.
Neste artigo, vamos explorar os conceitos básicos da Web Push API, como ela funciona por baixo dos panos e o que é necessário para começar a implementar notificações push em suas aplicações web.
O que é a Web Push API?
A Web Push API é uma especificação que permite que navegadores (como Chrome, Firefox e outros) registrem um Service Worker e fiquem aptos a receber notificações de um servidor, mesmo que a aba do seu site não esteja aberta. Essa funcionalidade é especialmente interessante para:
- Atualizações em tempo real: Informar sobre novidades, notícias de última hora ou conteúdos atualizados.
- Alertas de eventos: Notificar sobre eventos importantes ou lembretes de tarefas.
- Engajamento com o usuário: Manter o usuário conectado à sua marca, mesmo quando ele não está navegando pelo site.
Como funciona o fluxo de notificação?
- Solicitação de permissão
O navegador solicita permissão ao usuário para receber notificações. Se o usuário concordar, o site obtém um endpoint único (geralmente uma URL) onde as mensagens podem ser enviadas. - Registro do Service Worker
O Service Worker é um script que roda em segundo plano no navegador. Ele é responsável por receber as notificações mesmo com o site fechado e, então, exibir o alerta na tela. - Envio de mensagens
Do lado do servidor, é necessário enviar a mensagem (payload) para o endpoint gerado na etapa de registro. Ferramentas como oweb-push
(biblioteca para Node.js) ou serviços de terceiros ajudam nessa comunicação. - Recebimento e exibição
Quando o navegador recebe a mensagem via Service Worker, ele exibe uma notificação usando a própria API de notificações. Você pode personalizar o título, corpo, ícone e até ações dentro da notificação.
Principais componentes técnicos
Service Worker
O Service Worker é fundamental. Ele funciona como um proxy entre a aplicação web e a rede, gerenciando recursos offline e capturando eventos de push para exibir notificações. O script de Service Worker normalmente fica em um arquivo dedicado, por exemplo: service-worker.js
.
Push Subscription
Após o usuário conceder permissão, é criado um Push Subscription, que contém informações únicas para identificar o navegador/usuário. Essa subscription fornece a URL para onde as mensagens devem ser enviadas e as chaves necessárias para criptografia.
Servidor de Push
Você precisa de um servidor para enviar requisições de push (ou usar um serviço terceirizado). Este servidor dispara as notificações para o endpoint registrado. Em Node.js, por exemplo, é possível utilizar bibliotecas como web-push para facilitar o envio.
Exemplo de implementação básica
Service Worker (service-worker.js
)
self.addEventListener('push', function(event) {
const data = event.data.json();
const options = {
body: data.body,
icon: '/images/icon.png',
};
event.waitUntil(
self.registration.showNotification(data.title, options)
);
});
Registro do Service Worker (app.js
)
if ('serviceWorker' in navigator && 'PushManager' in window) {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => console.log('Service Worker registrado:', registration))
.catch(error => console.error('Erro ao registrar:', error));
}
Envio de Notificação via Node.js
const webPush = require('web-push');
const vapidKeys = {
publicKey: 'SUA_CHAVE_PUBLICA_VAPID',
privateKey: 'SUA_CHAVE_PRIVADA_VAPID'
};
webPush.setVapidDetails(
'mailto:seu-email@dominio.com',
vapidKeys.publicKey,
vapidKeys.privateKey
);
const pushSubscription = {
endpoint: '<ENDPOINT_DO_NAVIGATOR>',
keys: {
p256dh: '<CHAVE_P256DH>',
auth: '<CHAVE_AUTH>'
}
};
const payload = JSON.stringify({
title: 'Notificação de Teste',
body: 'Funciona mesmo, uau!'
});
webPush.sendNotification(pushSubscription, payload)
.then(() => console.log('Notificação enviada!'))
.catch(err => console.error('Erro:', err));
Conclusão
A Web Push API é uma excelente forma de manter o engajamento do usuário, enviando atualizações em tempo real sem que ele precise estar com o site aberto. Esperamos que este artigo tenha dado um bom ponto de partida para você começar a explorar o uso de notificações push na web.
Se você quiser aprender mais sobre boas práticas e segmentação de push, fique ligado nos próximos posts!
Boa programação e até breve! 🚀