Perguntas frequentes sobre notificações push

Por que o push não funciona quando o navegador está fechado?

Essa pergunta surge com frequência, principalmente porque existem alguns cenários que dificultam o raciocínio e a compreensão.

Vamos começar com o Android. O SO Android foi projetado para detectar mensagens push e, ao receber uma, ativar o app Android apropriado para processar a mensagem, independentemente de o app estar fechado ou não.

Isso é exatamente o mesmo que acontece com qualquer navegador no Android: o navegador é ativado quando uma mensagem push é recebida e, em seguida, ativa o service worker e envia o evento push.

Nos sistemas operacionais para computadores, isso é mais sutil e é mais fácil de explicar no Mac OS X, porque há um indicador visual para ajudar a explicar os diferentes cenários.

No Mac OS X, é possível saber se um programa está em execução ou não por uma marcação abaixo do ícone do app no dock.

Se você comparar os dois ícones do Chrome no dock a seguir, o da esquerda está em execução, conforme ilustrado pela marcação abaixo do ícone, enquanto o Chrome à direita não está em execução, daí a falta da marcação abaixo.

Exemplo do OS X

No contexto do recebimento de mensagens push no computador, você vai receber mensagens quando o navegador estiver em execução, ou seja, tiver a marcação abaixo do ícone.

Isso significa que o navegador pode não ter nenhuma janela aberta, mas você ainda vai receber a mensagem push no service worker, porque o navegador está em execução em segundo plano.

A única vez em que um push não será recebido é quando o navegador estiver completamente fechado, ou seja, não estiver em execução (sem marcação). O mesmo se aplica ao Windows, embora seja um pouco mais difícil determinar se o Chrome está sendo executado em segundo plano.

Como faço para que o app da Web da minha tela inicial seja aberto em tela cheia com um push?

No Google Chrome para Android, um app da Web pode ser adicionado à tela inicial e, quando aberto por lá, pode ser iniciado no modo de tela cheia sem a barra de URL, como mostrado abaixo.

Ícone da tela inicial para tela cheia

Para manter essa experiência consistente, os desenvolvedores querem que as notificações clicadas também abram o app da Web em tela cheia.

O Chrome "meio que" implementou isso, mas pode ser que você ache o recurso instável e difícil de entender. Os detalhes de implementação relevantes são:

Isso significa que, a menos que o usuário acesse seu site pelo ícone da tela inicial com bastante frequência, as notificações serão abertas na IU normal do navegador.

Esse problema será analisado mais a fundo.

Por que isso é melhor do que os WebSockets?

Um service worker pode ser ativado quando a janela do navegador é fechada. Um soquete da Web só vai existir enquanto o navegador e a página da Web forem mantidos abertos.

Qual é a relação entre GCM, FCM, Web Push e Chrome?

Essa pergunta tem várias facetas, e a maneira mais fácil de explicar é analisar o histórico do push da Web e do Chrome. Não se preocupe, é curto.

Dezembro de 2014

Quando o Chrome implementou o push da Web pela primeira vez, ele usou o Google Cloud Messaging (GCM) para enviar mensagens push do servidor para o navegador.

Isso não era uma notificação push da Web. Há alguns motivos para essa configuração inicial do Chrome e do GCM não ser um push da Web "real".

  • O GCM exige que os desenvolvedores configurem uma conta no Google Developers Console.
  • O Chrome e o GCM precisavam de um ID de remetente especial para ser compartilhado por um app da Web para configurar as mensagens corretamente.
  • Os servidores do GCM aceitavam uma solicitação de API personalizada que não era um padrão da Web.

Julho de 2016

Em julho, um novo recurso de push da Web foi lançado: as chaves do servidor de aplicativos (ou VAPID, como a especificação é conhecida). Quando o Chrome adicionou suporte a essa nova API, ele usou o Firebase Cloud Messaging (também conhecido como FCM) em vez do GCM como serviço de mensagens. Isso é importante por alguns motivos:

  • As chaves do Chrome e do servidor de aplicativos não precisam de nenhum tipo de projeto para serem configuradas com o Google ou o Firebase. Ele simplesmente funciona.
  • O FCM é compatível com o protocolo de push da Web, que é a API que todos os serviços de push da Web vão aceitar. Isso significa que, independentemente do serviço de push usado por um navegador, basta fazer o mesmo tipo de solicitação para que a mensagem seja enviada.

Por que é confuso hoje?

Há muita confusão agora que o conteúdo foi escrito sobre o tema de push da Web, muitos dos quais fazem referência ao GCM ou ao FCM. Se o conteúdo fizer referência ao GCM, provavelmente é um sinal de que ele é antigo OU está focado demais no Chrome. (Eu mesma fiz isso em várias postagens antigas.)

Em vez disso, pense no push da Web como um navegador que usa um serviço de push para gerenciar o envio e o recebimento de mensagens, em que o serviço de push aceita uma solicitação de "protocolo de push da Web". Se você pensar nesses termos, poderá ignorar qual navegador e qual serviço de push estão sendo usados e começar a trabalhar.

Este guia foi escrito para focar na abordagem de padrões de push da Web e ignora propositalmente qualquer outra coisa.

O Firebase tem um SDK para JavaScript. o que é e por que usá-lo?

Se você já conhece o SDK do Firebase para Web e percebeu que ele tem uma API de mensagens para JavaScript, talvez esteja se perguntando qual é a diferença entre ele e o Web Push.

O SDK de mensagens (conhecido como SDK do Firebase Cloud Messaging para JS) faz alguns truques nos bastidores para facilitar a implementação do push da Web.

  • Em vez de se preocupar com um PushSubscription e os vários campos dele, você só precisa se preocupar com um token do FCM (uma string).
  • Com os tokens de cada usuário, você pode usar a API FCM reservada para acionar mensagens push. Essa API não exige a criptografia de payloads. É possível enviar um payload de texto simples em um corpo de solicitação POST.
  • A API própria do FCM oferece suporte a recursos personalizados, como os Tópicos do FCM (também funciona na Web, embora não seja bem documentado).
  • Por fim, o FCM é compatível com Android, iOS e Web. Por isso, para algumas equipes, é mais fácil trabalhar com ele em projetos atuais.

Isso usa o push da Web nos bastidores, mas o objetivo é abstraí-lo.

Como eu disse na pergunta anterior, se você considerar o push da Web apenas como um navegador e um serviço de push, poderá considerar o SDK do Messaging no Firebase como uma biblioteca para simplificar a implementação do push da Web.

A seguir

Code labs