2015-03-12 4 views
1

У меня есть код php для отправки push-уведомления. Он работает для небольших данных (сообщений), но когда я пытаюсь отправить большой String в push-уведомление, он не работает. Есть ли ограничение на строку для отправки в GCM? если есть какой размер?GCM сообщение (или данные) предел

Спасибо adavnce

ответ

3

Да, есть предел 4096 байт на полезную нагрузку сообщения (которая включает в себя все пользовательские ключи и значения в вашей полезной нагрузки).

0

После нескольких попыток я обнаружил, что предел части данных сообщения не может превышать 2048 байт. Дело в том, что я использую кодировку UTF-8 для данных, что, я думаю, может быть причиной. Данные представляют собой содержимое небольшого текстового файла.

// Prepare JSON containing the GCM message content. 
JSONObject jGcmData = new JSONObject(); 
jGcmData.put("to", "/topics/"+args[0].trim()); 
// Set maximum time alive in seconds. 
jGcmData.put("time_to_live", 300); 
// Set the collapse key, which groups as one the messages of same topic 
jGcmData.put("collapse_key", args[0].trim()); 
// Prepare the GCM data 
JSONObject jData = new JSONObject(); 
String message = readFile(args[1].trim(), Charset.forName("UTF-8")); 
jData.put("message", message); 
System.out.println("Data length: " + message.length()); 
// Add the data to the message. 
jGcmData.put("data", jData); 
System.out.println("Total GCM length: " + jGcmData.toString().getBytes("UTF-8").length); 
// Create connection to send GCM Message request. 
URL url = new URL("https://android.googleapis.com/gcm/send"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestProperty("Authorization", "key=" + API_KEY); 
conn.setRequestProperty("Content-Type", "application/json"); 
conn.setRequestMethod("POST"); 
conn.setDoOutput(true); 
// Send GCM message content. 
DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream()); 
outputStream.write(jGcmData.toString().getBytes("UTF-8")); 
outputStream.flush(); 
outputStream.close(); 
// Read GCM response. 
InputStream inputStream = conn.getInputStream(); 
String resp = IOUtils.toString(inputStream); 
System.out.println(resp); 
System.out.println("SUCCESS!"); 
Смежные вопросы