我一直在尝试针对Android的Google Cloud Messaging服务.文档的某些部分说您可以发送最多4KB的数据,而here则说“通知消息最多可以发送2kb的数据”.
做一些测试我可以发送带有4KB数据的“数据”有效载荷的消息,服务器接受它们没有按预期的错误.
但是,使用“通知”有效负载我发现我可以发送超过2KB数据的消息,并且服务器没有返回错误.我预计这样的消息会太大了.
我发现“通知”有效负载与“数据”有效负载共享允许的4KB,但不是以相同的方式.在“数据”有效负载中,您可以通过添加键和值的大小来计算大小. “通知”有效负载占用的空间大于密钥大小和包含的值.
当包含“通知”字典时,如何预先计算有效载荷的大小?
解决方法
对于包含“数据”字典而没有“通知”字典的消息,我设法发送最多4096个字符(计算所有键和值的长度).
对于包含“通知”字典而没有“数据”字典的消息,以及包含“通知”字典和“数据”字典的消息,我设法发送最多4062个字符.我无法弄清楚剩余的34个字符是如何计算的.
这意味着将“通知”有效负载限制为2K的文档不正确.你可以发送接近4K.
现在,阅读FCM的最新文档,我发现the documentation of Message types说:
Notification messages contain a predefined set of user-visible keys. Data messages,by contrast,contain only your user-defined custom key-value pairs. Notification messages can contain an optional data payload. Maximum payload for both message types is 4KB,except when sending messages from the Firebase console,which enforces a 1024 character limit.
另一方面,the description of the “MessageTooBig” error说:
Check that the total size of the payload data included in a message does not exceed FCM limits: 4096 bytes for most messages,or 2048 bytes in the case of messages to topics. This includes both the keys and the values.
我测试的消息不是主题消息,因此根据两个引号,它们不应限于2K.