2016-04-15 104 views
0

我为我的一个应用程序实现了推送通知消息。我得到通知一般,但是当我想发送低于2K字节,但得到如下回应,错误实际数据...在发送有效载荷数据时发送Web推送通知错误“MessageTooBig”

要求:

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字节,对于iOS的 消息来说是消息到主题或通知消息的2048 字节。这包括键和值。

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

任何帮助,将不胜感激。

回答

0

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

当我通过GCM发送WebPush通知时,显然没有发现类似的问题“MessageTooBig”。

原来问题出在Base64编码。根据网络推送加密规范,对于salt和公钥密码,需要使用安全的base64编码,但对于GCM raw_data,您只需要“常规”Base64编码(在末尾使用==)。

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