Problemi comuni e segnalazione di bug

Matt Gaunt

Quando si verifica un problema con il push web, può essere difficile eseguire il debug del problema o trovare assistenza. Questo documento descrive alcuni problemi comuni e la procedura da seguire se riscontri un bug in Chrome o Firefox.

Prima di addentrarci nel debug push, potresti riscontrare problemi relativi al debug dei worker di servizi, all'impossibilità di aggiornare il file, alla mancata registrazione o a un comportamento generalmente insolito. È presente un documento fantastico sul debug dei service worker di cui ti consiglio vivamente di verificare se non hai familiarità con lo sviluppo dei service worker.

Durante lo sviluppo e il test del web push devi spuntare due fasi distinte, ognuna con il proprio insieme di problemi / problemi comuni:

  • Invio di un messaggio: assicurati che l'invio dei messaggi sia riuscito. Dovresti ricevere un codice HTTP 201. In caso contrario:
    • Verifica la presenza di errori di autorizzazione: se ricevi un messaggio di errore relativo all'autorizzazione, consulta la sezione Problemi di autorizzazione.
    • Altri errori relativi alle API: se ricevi una risposta con codice di stato diverso da 201, consulta la sezione Codici di stato HTTP per informazioni sulla causa del problema.
  • Ricezione di un messaggio: se riesci a inviare un messaggio correttamente, ma il messaggio non viene ricevuto sul browser:

Se non riesci a inviare e ricevere un messaggio push e le sezioni pertinenti di questo documento non aiutano a eseguire il debug del problema, potresti aver trovato un bug nel meccanismo di push. In questo caso, consulta la sezione Incremento delle segnalazioni di bug per inviare una segnalazione di bug valida con tutte le informazioni necessarie per accelerare la procedura di correzione dei bug.

Una cosa che vorrei dire prima di iniziare è che Firefox e Mozilla AutoPush Service presentano messaggi di errore efficaci. Se non riesci a procedere e non sai quale sia il problema, prova a utilizzare Firefox e vedi se viene visualizzato un messaggio di errore più utile.

Problemi di autorizzazione

I problemi di autorizzazione sono uno dei problemi più comuni riscontrati dagli sviluppatori quando iniziano a utilizzare il web push. Normalmente si tratta di un problema di configurazione delle chiavi del server delle applicazioni (ovvero chiavi VAPID) di un sito .

Il modo più semplice per supportare il push in Firefox e Chrome è fornire un applicationServerKey nella chiamata subscribe(). Il lato negativo è che qualsiasi discrepanza tra le chiavi del front-end e del server provocherà un errore di autorizzazione.

Su Chrome e FCM

Per Chrome, che utilizza FCM come servizio push, riceverai una risposta UnauthorizedRegistration da FCM per una serie di errori diversi, tutti relativi alle chiavi server delle applicazioni.

Riceverai un errore UnauthorizedRegistration in una delle seguenti situazioni:

  • Se non riesci a definire un'intestazione Authorization nella richiesta a FCM.
  • La chiave dell'applicazione utilizzata per sottoscrivere l'utente non corrisponde alla chiave utilizzata per firmare l'intestazione Authorization.
  • La scadenza non è valida nel tuo JWT, ad esempio supera le 24 ore o il JWT è scaduto.
  • Il formato JWT non è corretto o contiene valori non validi.

La risposta di errore completa è simile alla seguente:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

Se ricevi questo messaggio di errore in Chrome, prova a eseguire un test in Firefox per vedere se può fornire informazioni più dettagliate sul problema.

AutoPush di Firefox e Mozilla

Firefox e Mozilla AutoPush forniscono un semplice insieme di messaggi di errore per i problemi relativi a Authorization.

Se l'intestazione Authorization non è inclusa nella richiesta push, riceverai una risposta di errore Unauthorized da Mozilla AutoPush.

{
  "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 la scadenza nel tuo JWT è scaduta, riceverai anche un errore Unauthorized con un messaggio che spiega che il token è scaduto.

{
  "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 le chiavi del server delle applicazioni sono diverse tra il momento in cui l'utente è stato sottoscritto e quello in cui è stata firmata l'intestazione Authorization, verrà restituito un errore Not Found:

{
  "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"
}

Infine, se nel tuo JWT è presente un valore non valido (ad esempio se il valore "alg" è un valore imprevisto), riceverai il seguente errore da 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"
}

Codici di stato HTTP

Esiste una serie di problemi che possono comportare la generazione di un codice di risposta non 201 da un servizio push. Di seguito è riportato un elenco dei codici di stato HTTP e del loro significato in relazione al web push.

Codice di stato Descrizione
429 Troppe richieste. Il server delle applicazioni ha raggiunto un limite di frequenza con un servizio push. La risposta del servizio deve includere un'intestazione "Riprova-Dopo" per indicare quanto tempo deve passare prima che sia possibile effettuare un'altra richiesta.
400 Richiesta non valida. Una delle intestazioni non è valida o non è formattata correttamente.
404 Non trovato. In questo caso, devi eliminare PushSubscription dal tuo backend e attendere l'opportunità di riabbonarti all'utente.
410 Finito. L'abbonamento non è più valido e dovrebbe essere rimosso dal backend. Questo può essere riprodotto chiamando "unsubscribe()" su un "PushSubscription".
413 Dimensioni del payload troppo grandi. Le dimensioni minime del payload che un servizio push deve supportare sono 4096 byte (o 4 kB). Qualsiasi dimensione più grande può causare questo errore.

Se il codice di stato HTTP non è in questo elenco e il messaggio di errore non è utile, controlla la specifica del protocollo Web push per verificare se viene fatto riferimento al codice di stato e se è possibile utilizzarlo.

Problema di crittografia del payload

Se riesci ad attivare correttamente un messaggio push (ovvero inviare un messaggio a un servizio web push e ricevi un codice di risposta 201) ma l'evento push non si attiva mai nel tuo service worker, questo di solito indica che il browser non è riuscito a decriptare il messaggio che ha ricevuto.

In questo caso, nella console DevTools di Firefox dovresti visualizzare un messaggio di errore simile al seguente:

Firefox DevTools con il messaggio di decrittografia.

Per verificare se si tratta di questo problema in Chrome:

  1. Visita la pagina about://gcm-internals e fai clic sul pulsante "Avvia registrazione".

Record interni di Chrome GCM.

  1. Attiva un messaggio push e cerca in "Log degli errori di decrittografia dei messaggi".

Log di decrittografia interni GCM.

Se si è verificato un problema con la decrittografia del payload, verrà visualizzato un errore simile a quello mostrato sopra. Osserva il messaggio AES-GCM decryption failed nella colonna dei dettagli.

Esistono alcuni strumenti che possono aiutarti a eseguire il debug della crittografia, se questo è il tuo problema:

Problema di connessione

Se non ricevi un evento push nel service worker e non vedi errori di decrittografia, è possibile che il browser non riesca a connettersi a un servizio push.

In Chrome, puoi verificare se il browser riceve messaggi esaminando la ricezione del log dei messaggi (sic) in about://gcm-internals.

Gli utenti interni di GCM ricevono il log dei messaggi.

Se non ricevi il messaggio in tempo, assicurati che lo stato della connessione del tuo browser sia CONNECTED:

Stato connessione interna GCM.

Se non è "COLLEGATO", potrebbe essere necessario eliminare il profilo corrente e crearne uno nuovo. Se il problema persiste, invia una segnalazione di bug come suggerito di seguito.

Creazione di segnalazioni di bug in corso...

Se nessuna delle soluzioni elencate sopra ti aiuta a risolvere il problema e non è tutto chiaro, segnala un problema relativo al browser in cui si è verificato il problema:

Per Chrome, dovresti segnalare il problema qui: https://bugs.chromium.org/p/chromium/issues/list Per Firefox, devi segnalare il problema su: https://bugzilla.mozilla.org/.

Per fornire una segnalazione di bug valida, devi fornire i seguenti dettagli:

  • I browser utilizzati per il test (ad esempio, Chrome versione 50, Chrome versione 51, Firefox versione 50, Firefox versione 51).
  • Un PushSubscription di esempio che dimostra il problema.
  • Includi qualsiasi richiesta di esempio (ovvero contenuti delle richieste di rete a un servizio push, intestazioni incluse).
  • Includi anche eventuali risposte di esempio alle richieste di rete.

Se sei in grado di fornire un esempio riproducibile, che sia un codice sorgente o un sito web in hosting, spesso velocizza la diagnosi e la risoluzione del problema.

Passaggi successivi

Codelab