6

W dokumencie android GCM, mówi się, że ładunek ma limit 4096 bajtów.jak liczyć długość android gcm ładunku

Jednak znalazłem, że mogę wysłać ładunek z 16834 byes.

Czy popełniłem błąd? I obliczana długość następująco:


Map<Object, Object> jsonRequest = new HashMap<Object, Object>(); 
setJsonField(jsonRequest, GCMConstants.PARAM_TIME_TO_LIVE, message.getTimeToLive()); 
setJsonField(jsonRequest, GCMConstants.PARAM_COLLAPSE_KEY, message.getCollapseKey()); 
setJsonField(jsonRequest, GCMConstants.PARAM_DELAY_WHILE_IDLE, message.isDelayWhileIdle()); 
jsonRequest.put(GCMConstants.JSON_REGISTRATION_IDS, registrationIds); 
Map<String, Object> payload = message.getData(); 
if (!payload.isEmpty()) { 
    jsonRequest.put(GCMConstants.JSON_PAYLOAD, payload); 
} 
String requestBody = gson.toJson(jsonRequest); 
System.out.println(requestBody.getBytes("UTF-8").length); 

Ponadto, jaka jest reakcja z GCM jeśli ładunek jest zbyt długi?

Odpowiedz

13

Jeśli ładunek jest zbyt duży, w komunikacie o błędzie pojawi się komunikat "MessageTooBig". Częścią ładunku użytecznego, która nie może przekraczać 4096, są wszystkie niestandardowe klucze i wartości w polu danych. Nie liczy się identyfikatorów rejestracji i nie liczy się wcześniej zdefiniowanych kluczy, takich jak czas życia i klucz zwinięcia. Swoją drogą dowiedziałem się, że mimo iż dokumentacja mówi, że ładunek nie może przekraczać 4096 bajtów, akceptują one większe ładunki, o ile nie przekraczają 4096 znaków (tj. Można wysłać ciąg 4096 znaków, który zawiera znaki zakodowane w więcej niż jeden bajt, więc długość ładunku w bajtach przekroczy 4096).

+1

to dobra wiadomość - mogę wysłać jedną prośbę o tyle identyfikatorów rejestracji, ile chcę? lub czy istnieje ograniczenie? – epeleg

+2

@epeleg Limit to 1000 identyfikatorów rejestracji. – Eran

0

Jednak od dzisiaj można było przesyłać do 4089 znaków za pośrednictwem GCM, a 511 znaków było widocznych na panelu powiadomień po zjechaniu w dół. Praktycznie przetestowałem to: