しかしその「リアルタイムな情報」を、「PCの前にいるときにPCのブラウザで」しか受け取れないとしたら、そのリアルタイムなパワーが半減してしまいます。スマートフォンやタブレット(以降スマートデバイス)の普及が加速し、「いつでもどこでも手軽に情報に接すること」が当たり前になりつつある昨今、「リアルタイムな情報」をスマートデバイスから送受信することで、さらにリアルタイムWebの可能性が広がるのです。
本記事では、スマートデバイスをSocket.IOのクライアントにする方法について解説します。Tech-Sketchに掲載した元ネタはこちらです。
HTML5とネイティブアプリ
第1回で紹介したSocket.IOのSupported browsersを確認すると、iPhoneやiPadのSafari、AndroidのWebkitなどがサポートされていることが分かります。よって、スマートデバイスのブラウザからリアルタイムに情報を送受信するだけであれば、Socket.IOのクライアント側JavaScriptコードをスマートデバイスのブラウザ上で動作させれば事足ります。実際、第1回で作成したチャットアプリは、iOS上のSafariやAndroid上のWebKitやChromeでそのまま動作します。
しかし「スマートデバイスのブラウザ(のHTML5とJavaScript)ができること」以上の機能を実現したい場合、ネイティブアプリを実装せざるを得ません。例えばカメラやマイク、加速度センサーなどの生のセンサー情報を扱う場合や、3Dグラフィックスをバリバリ動作させる場合などです。
WebRTCやWebGLといったHTML5とそれに付随する規格がスマートデバイスのブラウザにも実装され、性能がさらに向上すれば、ブラウザとJavaScriptのみでカメラや音声を扱い、3Dグラフィックスを滑らかに動作できるようになるでしょう。しかしそれまでは、ネイティブアプリで実装するという選択肢を取らざるを得ません。
ネイティブアプリとSocket.IO
では実際に、iOSネイティブアプリとAndroidネイティブアプリをSocket.IOのクライアントとし、第1回で作成したSocket.IOによるチャットサーバへ接続してみましょう。
なお、iOSの場合はUIWebView、Androidの場合はWebViewを用いれば、公式のSocket.IO JavaScriptクライアントライブラリを内包したHTML経由でSocket.IOサーバへ接続することも可能です。ただしパフォーマンス面で難がありますし、クライアント側が複数の言語で構成され煩雑になるので、今回はObjective-CとJavaそれぞれのネイティブライブラリから直接Socket.IOサーバへ接続する方法を紹介します。
なお、以降で紹介するソースコードには省略されている部分があります。完全なソースコードは、Tech-Sketchのgithubを参照してください。
iOS:AZSocketIO
では最初に、iOSネイティブのSocket.IOクライアントを実装してみましょう。
Socket.IOの公式Wikiでは、Objective-Cで書かれたSocket.IOライブラリとして「pkyeck/socket.IO-objc」が紹介されています。ただ、このpkyeckのsocket.IOライブラリはCocoaPodsと相性が悪いようで、依存するライブラリを1つずつインストールする必要があります。そこで今回は、CocoaPodsで簡単にインストールできるAZSocketIOを用います。
CocoaPodsとは、Objective-C用のパッケージ管理システムです。RubyでのBundlerやNode.jsでのnpmに相当します。
CocoaPodsを利用すると、githubなどから依存ライブラリを自動ダウンロードしてくれるだけでなく、ARCコードとnonARCコードそれぞれのビルドオプションの設定やヘッダサーチパスの追加など、面倒なプロジェクト設定をすべて自動で行います。
大変便利なので、利用可能な場合はCocoaPodsを利用すべきでしょう。
CocoaPodsの詳細は公式サイトやTech-Sketchの記事を参考にしてください。
依存ライブラリの定義
Xcodeプロジェクトのプロジェクトファイル(XXX.xcodeproj)と同じディレクトリに、下記podfileを作成します。
platform :ios, '5.0' pod 'AFNetworking' pod 'SocketRocket' pod 'AZSocketIO', '~> 0.0.4'
このpodfileでは、ターゲットとなるプラットフォームを、iOS 5.0と定義しています。Xcodeで指定されているDeployment Targetバージョンと一致させてください。
またAZSocketIOはバージョンを "~>0.0.4"と指定しているため、0.0.4~0.0.9の中から最新バージョンが選択されます。
依存ライブラリのインストール
ターミナルから"pod install"を実行すれば、podfileに指定した依存ライブラリがダウンロードされ、適切にビルド設定が行われたXcodeワークスペース(XXX.xcworkspace)が生成されます。
以降は、生成されたXcodeワークスペースで開発を行います。