アピアリーズ Tech Blog

アプリ開発・運用を簡単にするBaaS「アピアリーズ」。このBlogでは、アプリを作りたい方、運用したい方、広めたい方に、ちょっぴり使える情報をお届けします。

アプリ開発時に使える通信機能まとめ

アプリに通信機能を実装する

アプリは通信機能を実装する事でよりいろいろな事ができるようになります。サーバから画像や動画をダウンロードして表示するとか、データベースにデータを保存したり呼び出したりするとか、WEBサイトを表示したりすることもできます。

アプリで実現できる幅が広がる通信機能ですが、どのように実装し、どんなところに気をつければいいのでしょうか。今回は通信機能のリファレンスをまとめてみました。

f:id:appiaries:20150807162803j:plain

HTTP通信の実装リファレンス

通信機能を実装する場合、どのようにするのでしょうか。最初は汎用性が高くてよく使われるWEBの通信、HTTP通信を見てみましょう。

AndroidアプリでHTTP通信をする場合、DefaultHttpClientクラスを使うのが一般的でしたが、Android次期バージョンのSDKよりサポートが無くなることから、今後はHttpURLConnectionを使うのが無難だと言えそうです。

iOSアプリでHTTP通信をする場合はと言うと、NSURLConnectionを使うのが一般的です。NSURLRequestを生成し、NSURLConnectionの生成の際に、先に生成したNSURLRequestを渡すと通信が開始し、NSURLConnectionにレスポンスコードが格納されます。NSURLConnectionを生成する段階で通信が開始される事に注意が必要です。

これでHTTP通信の実装をすることができるのですが、通信はアプリや端末、サーバーやネットワークなど様々な要因で例外が発生する場合があります。アプリ側でもその例外に備える事やなぜそのようになったのかログを残す事が大切です。

iOSアプリでログを残すにはNSLog関数を使用します。また、Androidアプリでログを残すのにはLogクラスを使用します。

Androidアプリでは例外が出た場合にアプリが異常停止しないよう、通信機能を使い際にはtry-catch文を使う事も重要です。例外が出た際のログ出力はcatchの中にコードを入れておく事で実行されます。

もう一つ、通信機能を実装する際の注意点があります。それは、通信機能はメインとは別のスレッドで走らせるべきであるという事です。なぜかというと、通信が始まるとそのスレッドは通信の結果が出るまで停止します。

ユーザーからすれば止まってしまうのでバグが発生したのかと思われてしまうかも知れません。通信中という文章だけで無く、アイコンやバーを動かしたりする事でちゃんと動いている事をアピールする事も大切です。

その他の通信機能の実装

他にもアプリに実装できる通信機能はいくつかありますのでご紹介します。

メール送信をするSMTP通信をする場合、AndroidアプリではJava mailライブラリを用います。サーバ設定のプロパティをSessionクラス生成時に引数として入れます。メッセージはMimeMessageクラスにSessionと送り先、タイトルと本文などを入れて送信します。

Javaの純正のライブラリを使うと通信や設定が細かくて面倒くさかったりします。そのような場合、オープンソースのライブラリを活用する事でより簡単に作る事ができ、かつ品質も良くなります。その上、無料で使用できるので、使わない手は無いですね。

AndroidでFTP通信を行う場合、Javaライブラリで作るとなると、Socketクラスで接続から通信まで1から10まで打ち込まなければならず面倒です。先に説明したとおり、オープンソースのライブラリを使うべきですね。種類が豊富なのですが、今回はAsyncTaskの場合を例に出してみます。

AsyncTaskはFTPだけでなく、SMTPを始めとした15種の通信にも対応しているので便利ですね。AsyncTaskでは、FTPClientクラスを使って接続ならconnectメソッド、送信ならstoreFileメソッドと1つのクラスでほとんどのFTP作業が行えます。シンプルでとても便利ですね。

通信機能は複雑なので難しいですが、アプリの幅は広がりますので挑戦する価値はあります。ぜひ試してみてください。

なお、アピアリーズのSDKをご利用いただければ、これらのような面倒な通信制御はほとんど考慮すること無く、サーバ(BaaS)にデータを保存したり、DBを検索したりといったことが可能です。ぜひ、お試し下さい。

外部リンク