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 的响应是什么?

4

2 回答 2

13

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

于 2012-12-04T18:32:49.167 回答
0

但截至今天,它允许通过 GCM 发送最多 4089 个字符,当它向下滑动时,通知面板中可以看到 511 个字符。 实际测试过

于 2017-05-09T07:22:07.333 回答