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.
- Adicione a gem
web-pushao seu Gemfile. - Execute
web-push generate-vapid-keysno seu terminal. - 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.
- Crie um
SendWebPushJob. - Percorra as inscrições de um usuário.
- Use a gem
web-pushpara enviar o payload. - 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
