Quando você encontra um problema com push na Web, pode ser difícil depurá-lo ou encontrar ajuda. Este documento descreve alguns dos problemas comuns e o que você deve se você encontra um bug no Chrome ou no Firefox.
Antes de falarmos sobre a depuração do push, talvez você esteja enfrentando problemas com a depuração. os próprios service workers, o arquivo não é atualizado, falha no registro ou apenas um comportamento incomum. Há um documento sobre depuração de service workers que recomendo conferir se você é iniciante desenvolvimento de service workers.
Há dois estágios distintos a serem verificados ao desenvolver e testar push na Web: cada um com seu próprio conjunto de problemas / problemas comuns:
- Enviar uma mensagem:verifique se o envio foi bem-sucedido.
Você receberá um código HTTP 201. Se você não :
- Verificar erros de autorização:se você receber uma autorização. de erro, veja a Seção "Problemas de autorização".
- Outros erros de API:se você receber uma resposta com um código de status diferente 201, consulte a seção Códigos de status HTTP para orientação sobre a causa do problema.
- Recebimento de uma mensagem: se você conseguir enviar uma mensagem,
mas a mensagem não for recebida no navegador:
- Verifique se há problemas de criptografia: consulte a seção Criptografia do payload Seção do problema.
- Verifique se há problemas de conexão:se o problema estiver no Chrome, ele pode ser uma conexão. Consulte a seção Problemas de conexão. para mais informações.
Se não for possível enviar e receber uma mensagem push e as seções relevantes neste documento não estão ajudando a depurar o problema, você pode ter encontrado uma no próprio mecanismo de push. Nesse caso, consulte o Gerar relatórios de bugs para registrar um bom relatório de bug com todas as informações necessárias para agilizar o processo de correção de bugs.
Uma coisa que eu gostaria de destacar antes de começar é que o Firefox e a O Mozilla AutoPush Service tem ótimas mensagens de erro. Se você ficar travado não tiver certeza qual é o problema, teste no Firefox e veja se você verá uma mensagem de erro mais útil.
Problemas de autorização
Os desenvolvedores enfrentam problemas de autorização começando com push na Web. Isso normalmente é um problema com a configuração do Chaves do servidor de aplicativo do site (também conhecidas como chaves VAPID)
A maneira mais fácil de dar suporte a push no Firefox e no Chrome é fornecendo um
applicationServerKey
na chamada subscribe()
. A desvantagem é que
qualquer discrepância entre seu front-end e as chaves do servidor resultará em um
erro de autorização.
No Chrome e no FCM
Para o Chrome, que usa o FCM como um serviço de push, você receberá uma
resposta UnauthorizedRegistration
do FCM para vários
todos envolvendo as chaves do servidor de aplicativos.
Você vai receber um erro UnauthorizedRegistration
em qualquer um dos seguintes
situações:
- Se você não definir um cabeçalho
Authorization
na solicitação para o FCM. - A chave de 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 seu JWT, ou seja, a expiração excede 24 horas ou o JWT expirou.
- O JWT está incorreto ou tem valores inválidos.
A resposta completa do erro será semelhante a esta:
<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, teste no Firefox para ver se for fornecer mais informações sobre o problema.
Firefox e Mozilla AutoPush
O Firefox e o Mozilla AutoPush oferecem um conjunto simples de mensagens de erro para
Authorization
problemas.
Você também receberá uma resposta de erro Unauthorized
do
Mozilla AutoPush se o cabeçalho Authorization
não estiver incluído no seu envio
solicitação.
{
"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 expiração no JWT tiver expirado, você também receberá uma
Unauthorized
com uma mensagem explicando que o token foi
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 de quando o usuário
assina e no momento em que o cabeçalho de autorização foi assinado, um 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 um valor inesperado), você 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á diversos problemas que podem resultar em códigos de resposta diferentes do 201 serviço push. Confira abaixo uma lista de códigos de status HTTP e o que eles significam para push na Web.
Código de status | Descrição |
---|---|
429 | Excesso de solicitações. Seu servidor de aplicativos atingiu um limite de taxa com um serviço push. A resposta do serviço deve incluir uma mensagem "Tentar novamente depois" cabeçalho para indicam quanto tempo antes de outra solicitação ser feita. |
400 | Solicitação inválida. Um de seus cabeçalhos é inválido ou mal formatado. |
404 | Não encontrado Nesse caso, você deve excluir o PushSubscription do seu back-end e aguardar uma oportunidade de reinscrever o usuário. |
410 | Pronto. A assinatura não é mais válida e deve ser removida da sua back-end. Isso pode ser reproduzido chamando `unsubscribe()` em uma `PushSubscription`. |
413 | O tamanho do payload é muito grande. O payload de tamanho mínimo que um serviço de push precisa O suporte é de 4.096 bytes (ou 4 KB). Qualquer valor maior pode resultar nesse erro. |
Se o código de status HTTP não estiver na lista e a mensagem de erro não for útil, consulte a documentação do Protocolo de push da Web especificação para saber se é referenciado junto com um cenário de quando esse código de status pode ser usados.
Problema de criptografia do payload
Se você conseguir acionar uma mensagem push (ou seja, enviar uma mensagem para um servidor serviço push e recebe um código de resposta 201), mas o evento de push nunca é acionado seu service worker, isso normalmente indica que o navegador falhou ao descriptografar a mensagem recebida.
Se esse for o caso, você verá uma mensagem de erro no DevTools do Firefox no console da seguinte forma:
Para verificar 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 no "Registro de falha de descriptografia de mensagem".
Se houver um problema com a descriptografia do payload, você verá um erro
semelhante ao exibido acima. Observe o AES-GCM decryption failed
na coluna de detalhes.
Se esse for seu problema, existem algumas ferramentas que podem ajudar a depurar a criptografia:
- Ferramenta Push Encryption Verifier de Peter Beverloo.
- Web Push: página de teste de criptografia de dados do Mozilla
Problema de conexão
Se você não estiver recebendo um evento push no service worker e não estiver erros de descriptografia, é possível que o navegador não esteja se conectando um serviço push.
No Chrome, é possível verificar se o navegador está recebendo mensagens examinando
o "Registro de recebimento de mensagens" (sic) em about://gcm-internals
.
Se a mensagem não chegar em tempo hábil, verifique se
o status da conexão do seu navegador for CONNECTED
:
Se ele não estiver "CONECTADO", exclua seu perfil atual e criar uma nova. Se isso ainda não resolver o problema, gere um relatório do bug conforme sugerido abaixo.
Gerar relatórios de bugs
Se nenhuma das opções acima ajudar com o problema e não houver sinal do que o problema pode ser, por favor, informe o problema no navegador que você está tendo problema com:
Para o Chrome, você discutiria o problema aqui: https://bugs.chromium.org/p/chromium/issues/list No Firefox, a questão deve ser levantada em: https://bugzilla.mozilla.org/
Para gerar um bom relatório do bug, inclua os seguintes detalhes:
- Navegadores em que você testou (por exemplo, Chrome versão 50, Chrome versão 51, Firefox Firefox versão 50 e Firefox versão 51).
- Um exemplo de
PushSubscription
que demonstra o problema. - Inclua exemplos de solicitações (ou seja, o conteúdo das solicitações de rede para um envio) incluindo cabeçalhos).
- Inclua também exemplos de respostas de solicitações de rede.
Se você puder fornecer um exemplo reproduzível, seja no código-fonte ou em um site hospedado site, ele geralmente acelera o diagnóstico e a resolução do problema.
A seguir
- Visão geral das notificações push na Web
- Como funciona o Push
- Como inscrever um usuário
- UX de permissão
- Como enviar mensagens com bibliotecas push da Web
- Protocolo push na Web
- Como processar eventos de push
- Como exibir uma notificação
- Comportamento das notificações
- Padrões de notificação comuns
- Perguntas frequentes sobre notificações push
- Problemas comuns e relatórios de bugs