如何计算Android GCM负载长度?

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

此外,如果负载过长,GCM会做出何种响应?
2个回答

13
如果有效负载过大,您将在错误消息中收到“MessageTooBig”。 有效负载中不能超过4096的部分是有效负载中的所有自定义键和值。您不计算注册ID,也不计算预定义键,例如存活时间和折叠键。 顺便说一下,我发现即使文档说有效负载不能超过4096字节,只要它们不超过4096个字符(即您可以发送一个包含已编码成多个字节的字符的4096个字符字符串,因此有效负载的长度将超过4096字节),他们也会接受更大的有效负载。

1
这是个好消息 - 所以我可以发送一个请求来获取我想要的所有注册ID吗?还是有限制的? - epeleg
2
@epeleg,注册ID的限制是1000。 - Eran

0

但是截至今天,GCM允许发送4089个字符,并且在下拉通知面板中可见511个字符。 我已经进行了实际测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接