Quando você se depara com um problema com o push da Web, pode ser difícil depurar o problema ou encontrar ajuda. Este documento descreve alguns dos problemas comuns e o que você deve fazer se encontrar um bug no Chrome ou no Firefox.
Antes de entrarmos na depuração de push, você pode estar enfrentando problemas com a depuração dos próprios service workers, o arquivo não está sendo atualizado, não está sendo registrado ou geralmente apenas um comportamento incomum. Há um documento incrível sobre como depurar service workers que eu recomendo que você leia se estiver começando a desenvolver service workers.
Há dois estágios distintos para verificar ao desenvolver e testar o push da Web, cada um com seu próprio conjunto de problemas comuns:
- Envio de mensagens: verifique se o envio de mensagens está funcionando.
Você vai receber um código HTTP 201. Se você não estiver:
- Verifique se há erros de autorização: se você receber uma mensagem de erro de autorização, consulte a seção Problemas de autorização.
- Outros erros da API: se você receber uma resposta com um código de status diferente de 201, consulte a seção "Códigos de status HTTP" para orientações sobre a causa do problema.
- Recebimento de uma mensagem: se você conseguir enviar uma mensagem,
mas ela não for recebida no navegador:
- Verifique se há problemas de criptografia: consulte a seção Problemas de criptografia de payload.
- Verifique se há problemas de conexão: se o problema estiver no Chrome, talvez seja uma conexão. Consulte a seção "Problemas de conexão" para mais informações.
Se você não conseguir enviar e receber uma mensagem push e as seções relevantes neste documento não ajudarem a depurar o problema, talvez você tenha encontrado um bug no próprio mecanismo de push. Nesse caso, consulte a seção Como gerar relatórios de bugs para registrar um relatório do bug de qualidade com todas as informações necessárias para acelerar o processo de correção de bug.
Antes de começarmos, vale destacar que o Firefox e o serviço AutoPush da Mozilla têm ótimas mensagens de erro. Se você não souber qual é o problema, teste no Firefox e veja se recebe uma mensagem de erro mais útil.
Problemas de autorização
Os problemas de autorização são um dos mais comuns que os desenvolvedores enfrentam ao começar a usar o Web Push. Normalmente, isso é um problema com a configuração das chaves do servidor de aplicativos (também conhecidas como chaves VAPID) de um site.
A maneira mais fácil de oferecer suporte ao push no Firefox e no Chrome é fornecer um
applicationServerKey na chamada subscribe(). A desvantagem é que
qualquer discrepância entre as chaves do front-end e do servidor vai resultar em um
erro de autorização.
No Chrome e no FCM
No Chrome, que usa o FCM como um serviço de push, você vai receber uma resposta UnauthorizedRegistration do FCM para uma série de erros diferentes, todos envolvendo as chaves do servidor de aplicativos.
Você vai receber um erro UnauthorizedRegistration em qualquer uma das seguintes
situações:
- Se você não definir um cabeçalho
Authorizationna solicitação para o FCM. - A chave do aplicativo usada para inscrever o usuário não corresponde à chave usada para assinar o cabeçalho de autorização.
- A expiração é inválida no JWT, ou seja, excede 24 horas ou o JWT expirou.
- O JWT está incorreto ou tem valores inválidos.
A resposta de erro completa é assim:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Se você receber essa mensagem de erro no Chrome, faça um teste no Firefox para ver se ele fornece mais informações sobre o problema.
Firefox e Mozilla AutoPush
O Firefox e o Mozilla AutoPush fornecem um conjunto de mensagens de erro para problemas de Authorization.
Você também vai receber uma resposta de erro Unauthorized do
Mozilla AutoPush se o cabeçalho Authorization não estiver incluído na solicitação
de push.
{
"errno": 109,
"message": "Request did not validate missing authorization header",
"code": 401,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Unauthorized"
}
Se a validade do JWT tiver expirado, você também vai receber um erro Unauthorized com uma mensagem explicando que o token expirou.
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid bearer token: Auth expired"
}
Se as chaves do servidor de aplicativos forem diferentes entre o momento em que o usuário se
inscreveu e o momento em que o cabeçalho de autorização foi assinado, um erro Not Found
será retornado:
{
"errno": 102,
"message": "Request did not validate invalid token",
"code": 404,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Not Found"
}
Por fim, se você tiver um valor inválido no JWT (por exemplo, se o valor "alg" for inesperado), você vai receber o seguinte erro do Mozilla AutoPush:
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid Authorization Header"
}
Códigos de status HTTP
Há uma série de problemas que podem resultar em um código de resposta diferente de 201 de um serviço de push. Confira abaixo uma lista de códigos de status HTTP e o que eles significam em relação ao push da Web.
| Código de status | Descrição |
|---|---|
| 429 | Excesso de solicitações. Seu servidor de aplicativos atingiu uma limitação de taxa com um serviço de push. A resposta do serviço precisa incluir um cabeçalho "Retry-After" para indicar quanto tempo deve ser aguardado antes de fazer outra solicitação. |
| 400 | Solicitação inválida. Um dos cabeçalhos é inválido ou está mal formatado. |
| 404 | Não encontrado Nesse caso, exclua a PushSubscription do back-end e aguarde uma oportunidade para renovar a assinatura do usuário. |
| 410 | Desaparecido. A assinatura não é mais válida e precisa ser removida do back-end. Isso pode ser reproduzido chamando `unsubscribe()` em uma `PushSubscription`. |
| 413 | O tamanho do payload é muito grande. O tamanho mínimo de payload que um serviço de push precisa aceitar é de 4.096 bytes (ou 4 KB). Qualquer valor maior pode resultar nesse erro. |
Se o código de status HTTP não estiver nessa lista e a mensagem de erro não for útil, verifique a especificação do protocolo Web Push para ver se o código de status é referenciado junto com um cenário de quando esse código de status pode ser usado.
Problema de criptografia de payload
Se você conseguir acionar uma mensagem push (ou seja, enviar uma mensagem para um serviço de push da Web e receber um código de resposta 201), mas o evento de push nunca for acionado no service worker, isso normalmente indica que o navegador não conseguiu descriptografar a mensagem recebida.
Se esse for o caso, uma mensagem de erro vai aparecer no console do DevTools do Firefox, assim:

Para conferir se esse é o problema no Chrome, faça o seguinte:
- Acesse about://gcm-internals e clique no botão "Start Recording".

- Acione uma mensagem push e procure em "Registro de falha na descriptografia de mensagens".

Se houver um problema com a descriptografia do payload, você verá um erro
semelhante ao mostrado acima. Observe a mensagem AES-GCM decryption failed
na coluna de detalhes.
Existem algumas ferramentas que podem ajudar a depurar a criptografia se esse for o problema:
- Ferramenta Push Encryption Verifier de Peter Beverloo.
- Web Push: página de teste de criptografia de dados da Mozilla
Problema de conexão
Se você não estiver recebendo um evento de push no service worker e não estiver vendo erros de descriptografia, talvez o navegador não esteja conseguindo se conectar a um serviço de push.
No Chrome, é possível verificar se o navegador está recebendo mensagens examinando
o "Receive Message Log" (sic) em about://gcm-internals.

Se a mensagem não chegar em tempo hábil, verifique se o status da conexão do navegador é CONNECTED:

Se não estiver, talvez seja necessário excluir o perfil atual e criar um novo. Se isso ainda não resolver o problema, envie um relatório de bug, conforme sugerido abaixo.
Como enviar relatórios de bugs
Se nenhuma das opções acima ajudar com o problema e não houver sinal de qual pode ser o problema, registre um problema no navegador com o qual você está tendo problemas:
No Chrome, você pode relatar o problema aqui: https://bugs.chromium.org/p/chromium/issues/list No Firefox, relate o problema em: https://bugzilla.mozilla.org/
Para fornecer um bom relatório de bug, inclua os seguintes detalhes:
- Navegadores em que você testou (por exemplo, Chrome versão 50, Chrome versão 51, Firefox versão 50, Firefox versão 51).
- Um exemplo de
PushSubscriptionque demonstra o problema. - Inclua exemplos de solicitações (por exemplo, conteúdo de solicitações de rede para um serviço de push, incluindo cabeçalhos).
- Inclua também exemplos de respostas de solicitações de rede.
Se você puder fornecer um exemplo reproduzível, seja um código-fonte ou um site hospedado, isso geralmente acelera o diagnóstico e a solução do problema.
A seguir
- Visão geral das notificações push da Web
- Como o push funciona
- Como inscrever um usuário
- UX de permissão
- Como enviar mensagens com bibliotecas de push da Web
- Protocolo de push da Web
- Como processar eventos push
- Como mostrar uma notificação
- Comportamento das notificações
- Padrões comuns de notificação
- Perguntas frequentes sobre notificações push
- Problemas comuns e como informar bugs