Notificações Push em PWA

PWA
Tempo de leitura: 4 minutos

As Notificações Push são o recurso final que permite que um Progressive Web App (PWA) transcenda a experiência de navegação e se integre ao sistema operacional. Elas possibilitam que seu PWA receba mensagens em tempo real e alerta o usuário sobre novos conteúdos ou eventos, mesmo quando o aplicativo está fechado ou o navegador não está ativo.

Esta funcionalidade é totalmente habilitada pelo Service Worker (SW).

1. ⚙️ Arquitetura das Notificações Push

O sistema de Notificações Push envolve quatro componentes principais que trabalham em conjunto:

  1. A PWA (Cliente): O código JavaScript que solicita permissão e gera a chave de assinatura.
  2. Service Worker (SW): O ouvinte em segundo plano que intercepta a mensagem push e a exibe como uma notificação.
  3. Serviço Push: O servidor de mensagens do navegador (ex: FCM do Google, APNs da Apple), que recebe a mensagem do seu servidor e a entrega ao dispositivo.
  4. Servidor da Aplicação: O seu backend (API) que armazena a chave de assinatura do usuário e envia a mensagem de notificação para o Serviço Push.

2. 🔑 Habilitando Notificações: Inscrição e Permissão

O processo de envio de uma notificação começa com a inscrição do usuário e a solicitação de permissão.

A. Solicitando Permissão

O acesso à API de Notificações Push requer a permissão explícita do usuário. Esta solicitação deve ser feita de forma contextualizada (após o usuário demonstrar interesse).

JavaScript

// Frontend JavaScript (no lado da aplicação)
function subscribeUser() {
  if ('Notification' in window) {
    Notification.requestPermission().then(permission => {
      if (permission === 'granted') {
        // Prossegue para a inscrição
        subscribeToPushService(); 
      } else {
        console.log('Permissão de notificação negada.');
      }
    });
  }
}

B. Inscrição e Chave VAPID

Após a permissão ser concedida, o PWA usa o Service Worker para se inscrever no Serviço Push do navegador, gerando um objeto PushSubscription.

Este objeto contém o endpoint (o endereço único do Serviço Push) e a chave pública de criptografia, essenciais para enviar a mensagem.

JavaScript

// O Service Worker é a base para a inscrição
function subscribeToPushService() {
  navigator.serviceWorker.ready.then(registration => {
    // Chave VAPID pública (necessária para autenticação)
    const applicationServerKey = urlBase64ToUint8Array('SUA_CHAVE_VAPID_PUBLICA'); 

    registration.pushManager.subscribe({
      userVisibleOnly: true, // Requisito: a notificação deve ser visível
      applicationServerKey: applicationServerKey
    })
    .then(subscription => {
      // 1. Envie este objeto 'subscription' (endpoint e keys) para o seu servidor
      sendSubscriptionToServer(subscription); 
      console.log('Usuário inscrito com sucesso:', subscription);
    });
  });
}

3. 🛡️ Interceptando e Exibindo a Notificação

O Service Worker é o único componente que pode interceptar o evento push do servidor, mesmo quando o PWA está fechado.

A. O Evento push (No Service Worker)

O SW ouve o evento push. Quando a mensagem do servidor chega:

JavaScript

// service-worker.js
self.addEventListener('push', (event) => {
  // O payload da mensagem push (dados do seu servidor)
  const data = event.data.json(); 
  
  const title = data.title || 'Nova Mensagem';
  const options = {
    body: data.body || 'Você tem uma atualização.',
    icon: '/icons/icon-192x192.png', // Ícone exibido na notificação
    badge: '/icons/badge.png', // Ícone exibido na barra de status (Android)
    data: { url: data.url } // Dados adicionais para usar no clique
  };

  // Exibe a notificação na tela do usuário
  event.waitUntil(self.registration.showNotification(title, options));
});

B. O Evento notificationclick (No Service Worker)

Quando o usuário clica na notificação, o SW intercepta o evento e pode executar ações, como abrir o PWA em uma URL específica.

JavaScript

// service-worker.js
self.addEventListener('notificationclick', (event) => {
  event.notification.close(); // Fecha a notificação

  // Recupera a URL de destino
  const targetUrl = event.notification.data.url || '/'; 

  event.waitUntil(
    // Abre ou foca a janela do PWA na URL de destino
    clients.openWindow(targetUrl) 
  );
});

4. 🚀 Enviando a Mensagem (Lado do Servidor)

O servidor da sua aplicação é responsável por:

  1. Armazenar as chaves de inscrição (PushSubscription) de todos os usuários.
  2. Usar uma biblioteca (como web-push em Node.js) para enviar a mensagem (o payload) para o Serviço Push (usando o endpoint e as chaves de criptografia).
  3. A mensagem deve ser enviada com autenticação VAPID (Voluntary Application Server Identification), garantindo que apenas seu servidor possa enviar mensagens ao seu PWA.

5. 🍏 Considerações Específicas do iOS/Safari

Historicamente, o suporte para Notificações Push em PWAs instaladas no iOS era limitado.

  • iOS 16.4 e superior: A Apple introduziu suporte para Notificações Push em PWAs instaladas no iOS e iPadOS. Isso funciona de forma semelhante ao Android, exigindo o uso da mesma arquitetura Push API e Service Worker.
  • Requisito iOS: O PWA deve ser instalado na tela inicial para receber Notificações Push.

✅ Conclusão Notificações Push

Notificações Push: As Notificações Push são a funcionalidade final para elevar um PWA ao nível de um aplicativo nativo em termos de engajamento. O processo requer a cooperação de quatro partes – o PWA solicita permissão, o Service Worker se inscreve e ouve, o Serviço Push entrega a mensagem, e seu Servidor envia o payload criptografado. Ao implementar corretamente os eventos push e notificationclick no seu Service Worker, você garante que seu PWA pode alertar e reengajar os usuários de forma eficaz, mesmo quando o aplicativo não está em uso.

Toda jornada tem um início, e o início para se tornar um desenvolvedor web é dominar as seguintes tecnologias, que você encontra aqui mesmo:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de experiência em tecnologia, atuo como Engenheiro de Computação, desenvolvedor de sistemas, escritor e produtor de conteúdo. Minha trajetória passa pelo ensino técnico, desenvolvimento web, arquitetura de sistemas e criação de soluções voltadas para a indústria de jogos digitais. Acredito que conhecimento deve ser acessível e aplicável. Essa visão resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, inteligência artificial, Game Design, mercado de jogos e carreiras na indústria de games. Sou autor do livro "GDD – O Guia Definitivo", uma obra dedicada ao planejamento e documentação de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na análise e validação de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos viáveis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na criação de metodologias para validação de produtos digitais e na produção de conteúdo técnico voltado ao ecossistema de jogos. Meu compromisso é unir teoria, prática e experiência de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da área.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *