![](/img/trans.png)
[英]How do i know all my changes made to document in offline mode are synced to firestore when i turn on internet in flutter firestore
[英]How do i know if my GCM Message is small enough (< 4kb) to send? (How to get size of String?)
我想将数据直接嵌入到 GCM(Google Cloud Message)中,以帮助我的应用程序跳过与服务器的往返行程。
谷歌表示总数据有效载荷需要在 4kb 以内。 使用 [key,value] 对发送数据。 假设我做了这样的事情:
String key = "key";
String data = "data";
Message message = new Message.Builder().addData(key, data).build();
sender.send(message, regId, 5);
我怎么知道String data
是否小于4kb? 据我所知,没有办法真正执行String.getSize()
或类似操作。
如果好奇,请链接到文档:http: //developer.android.com/training/cloudsync/gcm.html#embed
您可以使用以下方法获取字符串的字节:
String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;
确保您指定了String
的编码,因为不同的编码可能会为相同的 String 占用不同数量的字节。 在上面的示例中, UTF-8
用作编码。
要将字节转换为 kB,只需除以1024
。
编辑:这是 Geobits 评论中关于 Java 中不同编码的字节空间的一个很好而详细的答案。
int byteSize = data.length() * 2 // each char is 2 byte
更新
int byteSize = data.getBytes("UTF-8").length // if you want to know the size in your desired encoding
我在本地运行了几个测试,似乎在应用程序端你可以发送一个包,其中包含一个大约 4020 字节的键 + 值对,然后你开始从 gcm 收到错误,而在服务器端它有点多,大约4100 字节。 鉴于此,为了安全起见,我们决定在每一侧使用 4,000 字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.