2013-12-17 16 views
12

Ho un'app server che invia notifiche push GCM. Ogni invio di 1000 destinatari restituisce un messaggio che indica lo stato di ciascun ID di registrazione. Alcuni avranno codici di errore. C'è un documento da qualche parte di Google che mi dice come devo gestire questi codici e quali sono tutti i possibili codici di errore? Il mio Google Foo non sta presentando nulla.Codici errore GCM

risposta

36

Non sei sembrato abbastanza duro. Tutti i codici sono spiegati here sotto Interpreting an error response.

ho cercato di copiare e incollare in modo che esso non sia un collegamento unica risposta, ma la formattazione è un po 'fuori:

Interpretare un errore di risposta

Qui sono i raccomandazioni per la gestione dei diversi tipi di errori che potrebbero verificarsi quando si tenta di inviare un messaggio a un dispositivo:

mancante ID registrazione 012.351.Verificare che la richiesta contenga un ID di registrazione (nel parametro registration_id in un messaggio di testo semplice o nel campo 01_registration_ids in JSON). Accade quando il codice di errore è MissingRegistration.

ID di registrazione non valido Controllare la formattazione dell'ID di registrazione che si passa al server. Assicurati che corrisponda all'ID di registrazione che il telefono riceve in l'intento com.google.android.c2dm.intent.REGISTRATION e che tu non sianon troncandolo o aggiungendo caratteri aggiuntivi. Accade quando il codice di errore è InvalidRegistration.

Misterioso Mittente Un ID di registrazione è associato a un determinato gruppo di mittenti. Quando un'applicazione registra per l'utilizzo di GCM, deve specificare quali mittenti sono autorizzati a inviare i messaggi . Assicurati di utilizzare uno di quelli quando tenta di inviare messaggi al dispositivo. Se si passa a un diverso mittente , gli ID di registrazione esistenti non funzioneranno. Accade quando il codice di errore è MismatchSenderId.

dispositivo registrato Un ID di registrazione esistente può decade in diversi scenari, tra cui:

  • Se l'applicazione annulla la registrazione manualmente mediante emissione di com.google.android.c2dm.intent. Intento UNREGISTER.
  • Se l'applicazione viene automaticamente annullata, ciò può accadere (ma non è garantito) se l'utente disinstalla l'applicazione.
  • Se l'ID di registrazione scade. Google potrebbe decidere di aggiornare gli ID di registrazione.
  • Se l'applicazione viene aggiornata ma la nuova versione non ha un destinatario di trasmissione configurato per ricevere intenti com.google.android.c2dm.intent.RECEIVE.

Per tutti questi casi, è necessario rimuovere questo ID di registrazione dal server di terze parti e interrompere l'utilizzo per inviare messaggi. Accade quando il codice di errore è NotRegistered.

Messaggio troppo grande La dimensione totale dei dati del carico utile inclusa in un messaggio non può superare 4096 byte. Si noti che questo include sia la dimensione dei tasti sia i valori. Accade quando il codice di errore è MessageTooBig. Key

Dati non validi I dati payload contiene una chiave (ad esempio da o qualsiasi valore prefissato di google.) Che viene utilizzato internamente dal GCM nella intenti com.google.android.c2dm.intent.RECEIVE e non può essere usato. Nota: che alcune parole (come collapse_key) sono utilizzate anche da GCM ma sono consentite nel payload, nel qual caso il valore del carico utile sarà sovrascritto dal valore GCM. Accade quando il codice di errore è InvalidDataKey.

valido Time To Live Il valore per il Time to Live campo deve essere un numero intero che rappresenta una durata in secondi tra 0 e 2.419.200 (4 settimane). Accade quando il codice di errore è InvalidTtl.

Errore di autenticazione L'account del mittente che si sta tentando di utilizzare per inviare un messaggio non può essere autenticato. Possibili cause sono:

  • Intestazione di autorizzazione mancante o con sintassi non valida.
  • Numero di progetto non valido inviato come chiave.
  • Chiave valida ma con servizio GCM disabilitato.
  • Richiesta originata da un server non autorizzato nella IP della chiave server.

Verificare che il token che si sta inviando nell'intestazione Autorizzazione sia la chiave API corretta associata al progetto. È possibile verificare la validità della tua chiave API eseguendo il comando seguente:

api_key = YOUR_API_KEY

ricciolo --header "Autorizzazione: key = $ api_key" --header Content-Type: "application/json "https://android.googleapis.com/gcm/send -d" {\ "registration_ids \": [\ "ABC \"]} "

Se si riceve un codice di stato HTTP 401, la chiave API non è valida. Altrimenti dovresti vedere qualcosa del genere:

{"multicast_id": 6782339717028231855, "successo": 0, "errore": 1, "canonical_ids": 0, "risultati": [{"errore": "InvalidRegistration" }]}

Se si desidera confermare la validità di un ID di registrazione, è possibile farlo sostituendo "ABC" con l'ID di registrazione. Accade quando il codice di stato HTTP è 401.

Timeout Il server non è stato in grado di elaborare la richiesta in tempo. È necessario riprovare la stessa richiesta, ma DEVI soddisfare i seguenti requisiti:

Honor l'intestazione Retry-After se è inclusa nella risposta dal server GCM. Implementare il back-off esponenziale nel meccanismo dei tentativi. Ciò significa un ritardo in aumento esponenziale dopo ogni tentativo fallito (ad esempio se si attende un secondo prima del primo tentativo, attendere almeno due secondi prima del successivo, quindi 4 secondi e così via). Se si sta inviando più messaggi, , ritardare ciascuno di essi in modo indipendente con un importo casuale aggiuntivo per evitare di inviare una nuova richiesta per tutti i messaggi allo stesso tempo. I mittenti che causano problemi rischiano di essere inseriti nella lista nera. Accade quando il codice di stato HTTP è compreso tra 501 e 599 o quando il campo di errore di un oggetto JSON nell'array dei risultati è Non disponibile.

Errore interno server Il server ha riscontrato un errore durante il tentativo di elaborare la richiesta. È possibile riprovare la stessa richiesta (rispettando i requisiti elencati nella sezione Timeout), ma se l'errore persiste, si prega di segnalare il problema nel gruppo Android-gcm. Accade quando il codice di stato HTTP è 500 o quando il campo di errore di un oggetto JSON nell'array dei risultati è InternalServerError.

Nome pacchetto non valido Un messaggio è stato indirizzato a un ID di registrazione il cui nome del pacchetto non corrisponde al valore trasmesso nella richiesta. Accade quando il codice di errore è InvalidPackageName.

EDIT (2015/06/06):

Una nuova tabella di codici di risposta errore è stato pubblicato here.

Le nuove risposte di errore:

dispositivo Messaggio Vota Ha superato Il tasso di messaggi a un particolare dispositivo è troppo alto. Ridurre il numero di messaggi inviati a questo dispositivo e non riprovare immediatamente a inviare a questo dispositivo.

Topics Message Rate Exceeded Il tasso di messaggi per gli abbonati a un determinato argomento è troppo alto. Ridurre il numero di messaggi inviati per questo argomento e non riprovare immediatamente l'invio.

+0

Grazie, Eran! Mi vergogno di dire che ho guardato più volte quella parte della pagina. Penso che il formato di questo mi abbia buttato fuori. –

+2

@Eran Il link nella risposta non ha più il contenuto: http://developer.android.com/google/gcm/http.html#error_codes La settimana scorsa sono riuscito a vedere quei contenuti. Non sono sicuro di cosa sia successo nel weekend. –

+0

@TamilVendhanKanagaraju Bene, in tal caso, è una buona cosa che il contenuto sia qui. – Eran