5

アプリケーションがサーバーへのラウンドトリップをスキップできるように、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

4

3 に答える 3

5

以下を使用して、文字列のバイトを取得できます。

String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;

Stringエンコーディングが異なると、同じ文字列に対して異なるバイト数を使用する可能性があるため、必ずのエンコーディングを指定してください。上記の例でUTF-8は、がエンコーディングとして使用されています。

バイトをkBに変換するには、を除算するだけ1024です。

編集:Geobitsのコメントから、Javaのさまざまなエンコーディングのバイトスペースに関する詳細な回答があります。

于 2012-10-18T17:55:21.013 に答える
3
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
于 2012-10-18T17:51:21.883 に答える
0

私はローカルでいくつかのテストを実行します。アプリケーション側では、gcmからエラーが発生する前に、約4020バイトのキーと値のペアを含むバンドルを送信できるようですが、サーバー側では、もう少しです。 4100バイト。これを考慮して、安全にプレイするために、どちらの側でも4,000バイトを使用することにしました。

于 2014-09-19T06:34:37.020 に答える