2016-04-15 146 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編碼爲我解決了這個問題。

相關問題