10

Quando si utilizza l'API di Google Cloud Messaging per inviare messaggi tra un server di backend e un client Android/Chrome, il server di backend può, a volte, ricevere un limite di velocità superiore al codice di risposta. Questo codice è "DeviceMessageRateExceeded" per un HTTP Connection Server e "DEVICE_MESSAGE_RATE_EXCEEDED" per uno Cloud Connection Server.Limite di velocità Errore durante l'utilizzo dell'API di Google Cloud Messaging

Che cos'è questo codice di errore e come deve essere gestito?

risposta

12

Il codice di eccezione del limite di frequenza indica che si stanno inviando messaggi da un server di back-tr troppo spesso. Per garantire un servizio stabile, esiste un limite massimo per app per dispositivo/minuto sul numero di messaggi che possono essere inviati da un server di back-end. Questo limite è impostato in modo tale che le app più ben funzionanti non dovrebbero essere influenzate, tuttavia tutte le app dovrebbero essere preparate a ricevere questo codice di errore.

Come specificato nella domanda, nel caso di un HTTP Connection Server, il codice di errore sarà "DeviceMessageRateExceeded". E per un Cloud Connection Server, sarà "DEVICE_MESSAGE_RATE_EXCEEDED", che sostituirà il precedente codice di errore "QUOTA_EXCEEDED".

Se il server di back-end riceve questo codice di errore, deve rallentare la velocità di invio dei messaggi al client, idealmente implementando exponential backoff.

+0

L'account downstream è incluso nel contingente? Come faccio a sapere in che momento sarò in grado di inviare nuovamente i messaggi downstream? – doplumi

+0

Non saprai esattamente quando sarai in grado di inviare nuovamente i messaggi, ma dovresti utilizzare il backoff esponenziale a livello di sistema mentre tenti di reinviare. – PaulR

+0

Se già eseguiamo il backoff esponenziale e rispettiamo i codici di errore Retry-After per 5xx dovrebbe essere sufficiente? –

6

L'ack downstream CCS non è incluso nel contingente.

La quota DeviceMessageRateExceeded viene colpita quando si inviano troppi messaggi su un singolo dispositivo: non è necessario eseguire il backoff di tutto l'invio, solo per quell'ID di registrazione. Assicurati di gestire la risposta dell'ID di registrazione "Canonical": è possibile avere più regids che puntano allo stesso dispositivo.

Il 'quota_exceeded' è stato utilizzato in C2DM - GCM attualmente non lo restituisce. Se qualcuno sta ancora utilizzando C2DM, la gestione è l'invio/restituzione a ritroso per tutti i messaggi. O ancora meglio - per migrare a GCM che non ha questa quota globale.