我为我的某个应用程序实现了推送通知消息。我一般会收到通知,但是当我想发送低于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字节。
任何帮助都将不胜感激。
答案 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编码为我解决了这个问题。