2013年11月10日日曜日

[android]ファイル圧縮による通信量の削減

NTT docomo様ご提供の「AndroidTMアプリ作成ガイドライン~効率的な通信制御に向けて~」を読みました。


PDF内の「3.4.5. ファイル圧縮による通信量の削減」をやってみました。
携帯ネットワークの効率的な利用に対して、私にもすぐに貢献できそうだとおもったからです。
(まあ、私のアプリの通信なんて微々たるものだとはおもいますが……)
PDF内のサンプルコードHTTP GET時にGZIP要求を行うクラス(AsyncHttpGet2)の内容そのままです。

HttpResponseインスタンスを得るところまでをちょっと変更させてもらうと、
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("WEB APIのリクエストURL");
Header[] headers = new Header[2];
headers[0] = new BasicHeader("Accept-Encoding", "gzip, deflate");
headers[1] = new BasicHeader("User-Agent", "my program (gzip)");/** ★ */
httpGet.setHeaders(headers);
HttpResponse response = httpClient.execute(httpGet);
/** responseがGZIP圧縮されている場合は、GZIPInputStreamで受け取る */
/** PDFのサンプルコードがとても参考になります! */

★の("User-Agent", "my program (gzip)")は通信するサーバによっては不要だとおもいます。
Google様のWEB APIを使うときは必要なようです。
たとえばYouTube Data APIには、gzipを含むUser-Agentの指定が必要なことが明記されています。
gzipを含んだUser-Agentを指定しないと、GZIP圧縮された返戻を得られませんでした。
Google App Engineで作った自作のWEB APIでも同様だったので、Google様で共通の仕様なのかもしれません。




0 件のコメント:

コメントを投稿