6

एंड्रॉइड जीसीएम दस्तावेज़ में, यह कहा जाता है कि पेलोड की सीमा 4096 बाइट्स है।एंड्रॉइड जीसीएम पेलोड लंबाई

हालांकि, मैंने पाया कि मैं 16834 बाई के साथ एक पेलोड भेज सकता हूं।

क्या मैंने कोई गलती की?


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); 

इसके अलावा, क्या GCM से प्रतिक्रिया करता है, तो पेलोड बहुत लंबा है है: इस प्रकार मैं लंबाई गणना की?

उत्तर

13

यदि पेलोड बहुत बड़ा है, तो आपको त्रुटि संदेश में "MessageTooBig" मिल जाएगा। पेलोड का हिस्सा जो 4096 से अधिक नहीं होना चाहिए वह पेलोड में सभी कस्टम कुंजी और मान है। आप पंजीकरण आईडी की गणना नहीं करते हैं और आप पूर्वनिर्धारित कुंजी की गणना नहीं करते हैं जैसे कि रहने के लिए समय और पतन कुंजी। वैसे, मुझे पता चला कि भले ही प्रलेखन कहता है कि पेलोड 4096 बाइट से अधिक नहीं होना चाहिए, तब तक वे बड़े पेलोड स्वीकार करते हैं जब तक कि वे 4096 वर्णों से अधिक न हों (यानी आप 4096 वर्ण स्ट्रिंग भेज सकते हैं जिसमें अक्षरों को एन्कोड किया गया हो एक से अधिक बाइट, इसलिए बाइट्स में पेलोड की लंबाई 4096 से अधिक हो जाएगी)।

+1

यह बहुत अच्छी खबर है - इसलिए मैं जितनी पंजीकरण आईडी चाहता हूं, उसके लिए मैं एक ही अनुरोध भेज सकता हूं? या उस पर कोई सीमा है? – epeleg

+2

@epeleg सीमा 1000 पंजीकरण आईडी है। – Eran

0

लेकिन आज तक यह 408 वर्णों को जीसीएम के माध्यम से भेजने की अनुमति देता है और इसकी स्लाइड डाउन होने पर अधिसूचना पैनल में 511 वर्ण दिखाई दे रहे थे। व्यावहारिक रूप से इसका परीक्षण किया गया है