Web推送通知错误" MessageTooBig"发送有效载荷数据时

时间:2016-04-15 06:46:15

标签: google-cloud-messaging

我为我的某个应用程序实现了推送通知消息。我一般会收到通知,但是当我想发送低于2k字节的实际数据但却低于响应时出错......

请求:

curl --header "Authorization: key=AIzaSyDx43ertyuOm459WczpBwAqKSw8IxFHGQs" --header Content-Type:"application/json" --header "Encryption: salt=wtKCDREj4rt562LWk1muo3FA==" --header "Crypto-Key: dh=BPqg7luAvMisfd45sj5ZaBX7GSz9sSfSt3lhpA3Ea3qHCE_l6pi4bXZ3AsNX179iGWMDDQT9IqhHyXBw0230_kc="  --header "Content-Encoding: aes56ggcm" https://android.googleapis.com/gcm/send -d "@/tmp/data" --insecure

/tmp/data having very less data.

响应:

{"multicast_id":6999436345666218533,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MessageTooBig"}]}

我看了一些文章,发现如下......

  

检查消息中包含的有效负载数据的总大小   不超过GCM限制:大多数消息为4096字节,或2048字节   消息到主题或通知消息的情况下的字节数   iOS版。这包括键和值。

但我的完整有效负载数据大小小于2k字节。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

  

<强> Message Too Big

     

消息中包含的有效负载数据的总大小不能超过4096字节。请注意,这包括键的大小和值。   当错误代码是MessageTooBig时会发生。

根据Raghav Sood

您可以使用以下命令获取字符串的字节:

String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;
Make sure that you specify the encoding of the String, as different encodings may take up a different number of bytes for the same String. In the above example, UTF-8 is used as the encoding.

要将字节转换为kB,只需除以1024。

这有助于确保您的邮件有效且不会超过有效负载数据的总大小。

答案 1 :(得分:1)

我遇到了类似的问题&#34; MessageTooBig&#34;当它通过GCM发送WebPush通知时显然没有。

原来,问题出在Base64编码中。根据网络推送加密规范,对于salt和公钥url,需要使用安全base64编码,但对于GCM raw_data,你只需要常规&#34;常规&#34; Base64编码(最后==)。

更改raw_data的base64编码为我解决了这个问题。