2016-04-15 10 views
0

私のアプリケーションの1つにプッシュ通知メッセージを実装しました。私は一般的に、通知を得るが、私は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"}]} 

私はいくつかの記事を見て、下に見つかりました...

メッセージ に含まれるペイロードデータの合計サイズが、ほとんどのメッセージでは4096バイト、トピックへのメッセージの場合は2048 バイト、 iOSではGCMの制限を超えないことを確認してください。これには、キーと値の両方が含まれます。

しかし、私の完全なペイロードデータサイズは2kバイト未満です。

ご協力いただければ幸いです。

答えて

0

Message Too Big

メッセージに含まれるペイロードデータの合計サイズは、4096バイトを超えることはできません。これには、キーのサイズと値の両方が含まれます。 エラーコードがMessageTooBigの場合に発生します。 Raghav Soodによると

:ちょうど1024

で割る

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. 

は、キロバイトにバイトを変換するには:

あなたは文字列のバイト数を取得するには、次の使用することができますこれにより、メッセージがペイロードデータの合計サイズを超えないようにするのに役立ちます。

1

GCM経由でWebPush通知を送信していないときに、明らかに「MessageTooBig」という同様の問題が発生していました。

問題はBase64エンコーディングであることが判明しました。ウェブプッシュ暗号仕様によれば、saltと公開鍵urlの安全なbase64エンコーディングを使用する必要がありますが、GCM raw_dataの場合はBase64エンコーディング(末尾に==付き)を行う必要があります。

raw_dataのbase64エンコーディングを変更すると、この問題が修正されました。

関連する問題