Problemi comuni e segnalazione di bug

Matt Gaunt

Quando si verifica un problema con il push web, può essere difficile eseguirne il debug o trovare aiuto. Questo documento illustra alcuni dei problemi comuni e cosa dovresti se trovi un bug in Chrome o Firefox.

Prima di approfondire il debug push, potresti riscontrare problemi con il debug. ai service worker stessi, al file non aggiornato, alla mancata registrazione o in genere si tratta di un comportamento insolito. C'è un ottimo documento sul debug dei service worker che ti consiglio vivamente di consultare se non conosci lo sviluppo dei Service worker.

Ci sono due fasi distinte da spuntare durante lo sviluppo e il test del push web: ciascuno 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 :
  • Ricezione di un messaggio: se riesci a inviare un messaggio correttamente, ma il messaggio non viene ricevuto dal browser:

Se non riesci a inviare e ricevere un messaggio push e le sezioni pertinenti in questo documento non aiutano a eseguire il debug del problema, allora potresti aver trovato un nel meccanismo di spinta stesso. In questo caso, fai riferimento Aumento delle segnalazioni di bug per presentare una buona segnalazione di bug con tutte le informazioni necessarie per velocizzare la procedura di correzione dei bug.

Vorrei sottolineare che Firefox e la Mozilla AutoPush Service presenta grandi messaggi di errore. Se rimani bloccato, non sei sicuro del problema, prova in Firefox e controlla se ricevere un messaggio di errore più utile.

Problemi di autorizzazione

I problemi di autorizzazione sono uno dei problemi più comuni riscontrati dagli sviluppatori quando a partire dal web push. In genere questo è un problema relativo alla configurazione Le chiavi server delle applicazioni (o chiavi VAPID) del sito .

Il modo più semplice per supportare il push sia in Firefox che in Chrome è fornire un applicationServerKey nella chiamata subscribe(). Lo svantaggio è che eventuali discrepanze tra il front-end e le chiavi del server comportano errore di autorizzazione.

Su Chrome e FCM

Per Chrome, che utilizza FCM come servizio push, ricevi un UnauthorizedRegistration risposta da FCM per una serie di diverse relativi alle chiavi del server delle applicazioni.

Riceverai un errore UnauthorizedRegistration in una delle seguenti opzioni situazioni seguenti:

  • Se non definisci un'intestazione Authorization nella richiesta a FCM.
  • La chiave dell'applicazione utilizzata per la sottoscrizione dell'utente non corrisponde a quella utilizzata per firmare l'intestazione Authorization.
  • La scadenza non è valida nel tuo JWT, ovvero supera 24 ore o il JWT è scaduto.
  • Il JWT non è valido 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 utilizzare Firefox per verificare se fornirà informazioni più dettagliate sul problema.

AutoPush di Firefox e Mozilla

Firefox e Mozilla AutoPush forniscono una serie di messaggi di errore per Authorization problemi.

Riceverai inoltre una risposta di errore Unauthorized da Mozilla AutoPush se l'intestazione Authorization non è inclusa nel push richiesta.

{
  "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 JWT è scaduta, riceverai anche Unauthorized errore con un messaggio che spiega che il token ha 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 la data e l'ora dell'utente sottoscritto e al momento della firma dell'intestazione Autorizzazione, un Not Found verrà restituito l'errore:

{
  "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 il JWT contiene un valore non valido (ad esempio se il valore "alg" è un valore imprevisto), riceverai il seguente errore da Mozilla Push automatico:

{
  "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 relativo 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 messaggio "Riprova dopo" intestazione per indica quanto tempo deve passare prima che sia possibile effettuare un'altra richiesta.
400 Richiesta non valida. Una delle intestazioni non è valida oppure con formattazione scadente.
404 Non trovato. In questo caso, devi eliminare la sottoscrizione push dal tuo e attendere l'opportunità di riabbonarsi.
410 Non più disponibile. L'abbonamento non è più valido e deve essere rimosso dal tuo e il backend. Può essere riprodotto chiamando "unsubscribe()" su `PushSubscription`.
413 Dimensioni del payload troppo grandi. Il payload di dimensione minima che un servizio push deve è di 4096 byte (o 4 kB). Qualsiasi valore più grande può causare questo errore.

Se il codice di stato HTTP non è presente nell'elenco e il messaggio di errore non è utile, controlla il Web Push Protocol specifiche per vedere se viene fatto riferimento al codice di stato insieme a uno scenario in cui può .

Problema di crittografia del payload

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

In questo caso, dovresti visualizzare un messaggio di errore in DevTools di Firefox. in questo modo:

Firefox DevTools con un messaggio di decrittografia.

Per verificare se questo è il problema di Chrome, procedi nel seguente modo:

  1. Vai all'indirizzo about://gcm-internals e fai clic sul pulsante "Avvia registrazione". .

Record interni GCM di Chrome.

  1. Attiva un messaggio push e guarda nella sezione "Log degli errori di decrittografia dei messaggi".

Log di decrittografia dei dati interni di GCM.

Se si verifica un problema con la decrittografia del payload, verrà visualizzato un errore simile a quello mostrato sopra. (nota come AES-GCM decryption failed nella colonna dei dettagli).

Se questo è il tuo problema, esistono alcuni strumenti che potrebbero aiutarti a eseguire il debug della crittografia:

Problema di connessione

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

In Chrome, puoi controllare se il browser sta ricevendo messaggi esaminando nel campo "Ricevi log dei messaggi" (sic) in about://gcm-internals.

Log dei messaggi ricevuto dagli utenti interni di GCM.

Se non ricevi il messaggio in modo tempestivo, assicurati di lo stato della connessione del browser è CONNECTED:

Stato connessione interna GCM.

Se non è "COLLEGATO", potresti dover eliminare il tuo profilo corrente e creane uno nuovo. Se questo non è ancora una soluzione, invia una segnalazione di bug come suggerito di seguito.

Creazione di segnalazioni di bug

Se nessuna delle soluzioni precedenti risolve il problema e non c'è traccia della se il problema potrebbe essere, solleva un problema relativo al browser su cui hai problema con:

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

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

  • Browser su cui hai eseguito il test (ad es. Chrome versione 50, Chrome versione 51, Firefox versione 50, Firefox versione 51).
  • Un esempio di PushSubscription che dimostri il problema.
  • Includi eventuali richieste di esempio (ovvero richieste di contenuti delle reti a un push incluse le intestazioni).
  • Includi anche risposte di esempio da richieste di rete.

Se puoi fornire un esempio riproducibile, ovvero codice sorgente o un server sito, spesso velocizzano la diagnosi e la risoluzione del problema.

Passaggi successivi

Codelab