SwiftでBluetoothによるP2P通信を簡単に実現する方法
SwiftでBluetoothによるP2P通信を簡単に実現する方法を紹介します.
参考にさせていただいたのは以下の記事です.
英語ですが非常に丁寧に説明されており,簡単なチャットアプリケーションのサンプルもあるので理解が進みます.
とはいえ英語なので,以下に簡単に日本語でまとめておこうと思います.
使用するライブラリ
今回使用するのは「Multipeer Connectivity」というライブラリで,標準で入っています.
Multipeer Connectivityを使うことにより,近距離でのデータ通信をネットワークに接続されたサーバを介さずに行うことができます.
本エントリのタイトルに「Bluetoothで」と書いていますが,同じSSIDのWi-Fiに接続されている端末同士の接続もできるようです.
Multipeer ConnectivityではNSData型のデータの送受信が可能です.そのため,文字列だけでなく,画像や音声などのデータの送受信も可能だそうです.
チャットアプリケーションを実装する
実装と言っても上記のエントリにコードが用意されているので,DLしてきて少し修正するだけです.
- Xcodeを起動し,
File
->New
->Project
から,iOSのSingle View applicationプロジェクトを「MultipeerChat」という名前で新規作成します. - MultipeerConnectivity framework を Linked Frameworks and Libraries に追加します.
- ViewController.swiftを開き,上記のエントリ内にあるViewController.swiftのソースコードをコピーします.
- Main.storyboardを開き,以下を配置していきます.
UITextView
: このViewにチャットの内容が表示されます.UITextField
: チャットの送信フォームになります.UIButton
: 2つ配置します.1つはメッセージ送信(Send)用,もう1つは通信相手検索(Browse)用です.
- Main.storyboardとViewController.swiftの間で以下を関連付けます.
UITextView
とchatView
UITextField
とmessageField
UIButton
(Browse)とshowBrowse
関数UIButton
(Send)とsendChat
関数
これでチャットアプリケーションは完成です!
チャットアプリケーションを動かしてみる
チャットアプリケーションではBluetooth通信を行うので,当然ですが実機が2台以上必要になります.
また,iOS Developperにも登録しておかなければ,実機デバックができません.
それか,以下のような方法でiOSシミュレータ上で動かすこともできるようです.
- 2台の実機のBluetoothをONにしておきます.
- 2台の実機にアプリをインストールして起動します.
- 片方の端末で「Browse」ボタンを押します.近くでアプリを起動している人が表示されるので,タップして接続要求を行います.
- もう1台の端末に接続要求を許可するかを尋ねるアラートが表示されるので,「Accept」を押します.
- しばらくすると接続が確立するので,Browse画面を開いている場合はDoneを押してチャット画面に戻ります.
- 色々メッセージを送信してみてください.チャットができていることが分かるかと思います.
これだけでチャットができるなんて面白いですね.
しかも,サーバーとの通信は一切行っていないのがポイントです.
応用すれば色々おもしろいアプリが作れそうです!
ちなみに,ソースコードの詳細は英語ですがソースコード中にも丁寧にコメントが記述されています.
また,上記のエントリの下の方の「This code does the following things:」の部分にも詳しく記述されています.
おまけ
Multipeer Connectivityの詳細については下記の記事が参考になるかと思います(ただしObjective-Cです). http://www.gaprot.jp/pickup/ios7/vol3/
また,一口にBluetooth通信と言っても種類があるようで,それぞれにメリットとデメリットがあります.
以下のスライドが参考になるかと思います.