【问题标题】:Web push notification error "MessageTooBig" while sending payload data发送有效负载数据时出现 Web 推送通知错误“MessageTooBig”
【发布时间】:2016-04-19 01:47:07
【问题描述】:

我为我的一个应用程序实现了推送通知消息。我一般都会收到通知,但是当我想发送低于 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 字节。

任何帮助将不胜感激。

【问题讨论】:

    标签: google-cloud-messaging


    【解决方案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。

    这将帮助您确保您的消息不会超过有效负载数据的总大小。

    【讨论】:

      【解决方案2】:

      我在通过 GCM 发送 WebPush 通知时显然没有遇到类似的问题“MessageTooBig”。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-26
        • 2017-02-18
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 2018-04-04
        • 2016-07-19
        相关资源
        最近更新 更多