Engajamento em Tempo Real: Notificações Web Push no Rails 8

Desenvolvedores solo costumam enfrentar um obstáculo ao construir funcionalidades móveis. Antigamente, era necessário um aplicativo nativo para enviar notificações push. Se você não tivesse um, dependia de e-mail ou SMS caros.

A Web Push API muda isso. Ela funciona em quase todos os navegadores, incluindo o Safari no iOS. Você pode enviar alertas diretamente do seu app Rails para o dispositivo de um usuário. Eles não precisam baixar nada de uma App Store.

Veja como configurar isso no Rails 8.

O Fluxo de Trabalho

  • Inscrição (Subscription): O usuário clica em permitir no navegador. O navegador fornece um objeto de inscrição.
  • Armazenamento: Você salva esse objeto no seu banco de dados vinculado ao usuário.
  • O Push: Seu servidor Rails envia uma mensagem assinada para o serviço de push do navegador.
  • Entrega: O service worker no dispositivo exibe a notificação.

Passos de Configuração

1. Segurança

Você precisa de chaves VAPID para identificar seu servidor. Isso evita que hackers enviem alertas falsos.

  1. Adicione a gem web-push ao seu Gemfile.
  2. Execute web-push generate-vapid-keys no seu terminal.
  3. Salve essas chaves no seu arquivo de credenciais.

2. Banco de Dados

Usuários costumam ter múltiplos dispositivos. Crie um modelo para armazenar as inscrições. Execute: rails g model WebPushSubscription user:references endpoint:string p256dh_key:string auth_key:string Execute: rails db:migrate

3. Service Worker

Crie public/service-worker.js. Este arquivo é executado mesmo quando seu site está fechado. Ele escuta o evento de push e exibe a notificação.

4. Frontend

Registre o worker no seu application.js. Use um controller Stimulus para solicitar permissão. Envie os dados de inscrição para o seu controller Rails via uma requisição POST.

5. Background Jobs

Nunca envie notificações no ciclo principal de requisição. Use um background job para evitar lentidão no seu app.

  1. Crie um SendWebPushJob.
  2. Percorra as inscrições de um usuário.
  3. Use a gem web-push para enviar o payload.
  4. Exclua as inscrições se elas não forem mais válidas.

Você pode construir um app que pareça uma experiência móvel nativa usando apenas Rails e pequenas quantidades de Javascript.

Fonte: https://dev.to/zilton7/real-time-engagement-web-push-notifications-in-rails-8-5gdp