如何计算android gcm的有效负载长度

use*_*497 6 android payload push-notification google-cloud-messaging

在android GCM文档中,据说有效负载的限制为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);
Run Code Online (Sandbox Code Playgroud)

此外,如果有效载荷太长,GCM的响应是什么?

Era*_*ran 13

如果有效负载太大,您将在错误消息中获得"MessageTooBig".有效负载中不得超过4096的部分是有效负载中的所有自定义密钥和值.您不计算注册ID,也不计算预定义的密钥,例如生存时间和折叠密钥.顺便说一句,我发现尽管文档说有效负载不得超过4096字节,但只要它们不超过4096个字符,它们就会接受更大的有效负载(即你可以发送一个4096个字符的字符串,其中包含编码为更多的字符超过一个字节,因此有效载荷的长度(以字节为单位)将超过4096).

  • @epeleg限制是1000个注册ID. (2认同)