Problemas comuns e relatórios de bugs

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 :
  • Recebimento de uma mensagem: se você conseguir enviar uma mensagem, mas a mensagem não for recebida no navegador:

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:

Firefox DevTools com mensagem de descriptografia.

Para verificar se esse é o problema no Chrome, faça o seguinte:

  1. Acesse about://gcm-internals e clique no botão "Start Recording". .

Registro interno do GCM do Chrome.

  1. Acione uma mensagem push e procure no "Registro de falha de descriptografia de mensagem".

Registro de descriptografia interno do GCM.

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:

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.

Os componentes internos do GCM recebem o registro de mensagens.

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

Estado da conexão interno do GCM.

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

Code labs