10

Wenn die Google Cloud Messaging-API zum Senden von Nachrichten zwischen einem Backend-Server und einem Android/Chrome-Client verwendet wird, kann der Back-End-Server zeitweise einen Antwortcode mit Überschreitung der Übertragungsrate erhalten. Dieser Code ist "DeviceMessageRateExceeded" für eine HTTP Connection Server und "DEVICE_MESSAGE_RATE_EXCEEDED" für eine Cloud Connection Server.Fehlergrenze überschritten bei Verwendung der Google Cloud Messaging-API

Was ist dieser Fehlercode und wie sollte er verwaltet werden?

Antwort

12

Der Ausnahmecode für die Ratenbegrenzung gibt an, dass Sie Nachrichten von einem Back-End-Server zu häufig senden. Um einen stabilen Dienst zu gewährleisten, gibt es eine Obergrenze für die Anzahl der Nachrichten, die von einem Back-End-Server gesendet werden können. Dieses Limit ist hoch gesetzt, damit Apps mit dem besten Verhalten nicht beeinträchtigt werden. Alle Apps sollten jedoch darauf vorbereitet sein, diesen Fehlercode zu erhalten.

Wie in der Frage angegeben, wird im Falle eines HTTP Connection Server der Fehlercode "DeviceMessageRateExceeded" sein. Und für eine Cloud Connection Server wird es "DEVICE_MESSAGE_RATE_EXCEEDED" sein, die den vorherigen Fehlercode "QUOTA_EXCEEDED" ersetzt.

Wenn Ihr Back-End-Server diesen Fehlercode empfängt, muss er die Geschwindigkeit verlangsamen, mit der er Nachrichten an den Client sendet, idealerweise durch Implementierung von exponential backoff.

+0

Wird die nachgelagerte Quecke in der Quote berücksichtigt? Woher weiß ich, in welcher Zeit ich Downstream-Nachrichten erneut senden kann? – doplumi

+0

Sie werden nicht genau wissen, wann Sie wieder Nachrichten senden können, aber Sie sollten Exponentialbackoff auf Systemebene verwenden, während Sie versuchen, die Nachricht erneut zu senden. – PaulR

+0

Wenn wir bereits Exponential Backoff tun und respektieren Retry-After für 5xx Fehlercodes sollte das ausreichen? –

6

CCS Downstream Ack wird nicht in der Quote berücksichtigt.

Das DeviceMessageRateExceeded-Kontingent wird erreicht, wenn Sie zu viele Nachrichten an ein einzelnes Gerät senden. Sie müssen nicht das gesamte Senden zurücksenden, sondern nur diese Registrierungs-ID. Bitte vergewissern Sie sich, dass Sie die Registrierungs-ID-Antwort "Canonical" verarbeiten. Es ist möglich, dass mehrere Regids auf dasselbe Gerät zeigen.

Das 'quota_exceeded' wurde in C2DM verwendet - GCM gibt es derzeit nicht zurück. Wenn jemand immer noch C2DM benutzt - die Handhabung besteht darin, das Senden für alle Nachrichten zu verzögern. Oder noch besser - zu GCM zu migrieren, das dieses globale Kontingent nicht hat.