SlideShare a Scribd company logo
1 of 32
Download to read offline
GameKitを使った
              楽しい



              Bluetoothプログラミング
              @taiko19xx
              on SWWDC 2012/7/21
12年7月23日月曜日
自己紹介


              木村 俊彦(@taiko19xx)
              Webデザイン系学校の学生
              就職先探してます☆
              ぶろぐ http://tnfront.net/




12年7月23日月曜日
自己紹介

              iPhone開発歴 2年ぐらい
              自称ゆるゆる開発者
              アプリ
               BTGPS
               GPS2Photo(New!)




12年7月23日月曜日
今日は入門編です



12年7月23日月曜日
Bluetoothとは

              おなじみの近距離無線通信技術
              iPhone・iPadは全世代、Touchは第二世代から
              省電力
              バージョンやプロファイルが様々
               今回は気にしません




12年7月23日月曜日
iOSのBluetooth通信


              GameKitを使った通信
               主に使われるフレームワーク
               今のところこれしかない?
              CoreBluetooth(Bluetooth 4.0搭載機のみ)




12年7月23日月曜日
GameKitとは

              “ゲーム向け”のフレームワーク
               GameCenter(iOS 4.1∼)
               Peer-to-Peer Connectivity(iPhoneOS 3.0∼)
               In-Game Voice(同上)
              今回はPeer-to-Peer Connectivityのお話




12年7月23日月曜日
Part1.検索と接続



12年7月23日月曜日
検索から接続確立まで
              GKPeerPickerControllerを使う
               検索から接続までやってくれるので楽
               一対一の接続に限る
              GKPeerPickerControllerを使わない
               検索や接続を自前で実装する必要がある
               一対多や”すれちがい通信”ができるようになる
              今回はGKPeerPickerController使います


12年7月23日月曜日
GKPeerPickerController




              UIImagePickerControllerとそっくりです




12年7月23日月曜日
connectionTypesMask

              GKPeerPickerConnectionTypeNearby(Bluetooth)と
              GKPeerPickerConnectionTypeOnline(WiFi)がある
              TypeOnlineは接続処理を自前で実装する必要があ
              る
              TypeOnlineのみの指定はできず、TypeNearbyと
              セットです




12年7月23日月曜日
show
              こんな画面が出てきて探索が始まります




              見つかると一覧が表示されます




12年7月23日月曜日
show
              選択すると、選択された側で許可するかを聞かれ
              ます




12年7月23日月曜日
許可orキャンセル後


              許可すると
              peerPickerController:didConnectPeer:toSession:
              キャンセルするとpeerPickerControllerDidCancel:
              それぞれGKPeerPickerControllerDelegateのメソッ
              ドが呼び出されます




12年7月23日月曜日
GKPeerPickerController
              Delegate 実装



12年7月23日月曜日
peerPickerController:didConnectPeer:t
              oSession:




              currentSession(GKSession)は接続中のセッション
              setDataReceiveHandler:withContextを書かないと
              受信時に何も呼ばれません




12年7月23日月曜日
peerPickerControllerDidCancel:




          最低限、pickerを解放するだけ
          dismissは自動で実行されます




12年7月23日月曜日
Part2.データ送受信



12年7月23日月曜日
送受信まで
              送信
              GKSessionの
              sendDataToAllPeers:withDataMode:error:を呼び
              出す
              受信
              receiveData:fromPeer:inSession:context:が呼び
              出される
              setDataReceiveHandler:withContextを書き忘れ
              ていると呼び出されません


12年7月23日月曜日
sendDataToAllPeers:withDataMode:err
              or




              NSDataにして送ります
              sendData:toPeers:withDataMode:errorを使えば特
              定の接続先に送信できます



12年7月23日月曜日
withDataMode(Data Transmission
              Mode)

              GKSendDataReliable
               大容量データなど確実に送信する必要がある場
               合に使う
              GKSendDataUnreliable
               すぐに到着する必要がある場合に使いますが、
               再送信されません
              あまり気にせずReliableでいいと思います




12年7月23日月曜日
receiveData:fromPeer:inSession:contex
              t




              もちろんNSDataで入ってきます
              このメソッド内で非常に長い処理をするべきでは
              ない(らしい)




12年7月23日月曜日
送受信はこれだけ!



12年7月23日月曜日
切断



              disconnectFromAllPeers
                すべての接続先から切断
              disconnectPeerFromAllPeers:で特定の接続先から
              切断できます




12年7月23日月曜日
Part3.GKSessionDelegate




12年7月23日月曜日
GKSessionDelegate

              session:peer:didChangeState
              session:didReceiveConnectionRequestFromPeer
              session:connectionWithPeerFailed:withError:
              session:didFailWithError
              接続状態の判定やリクエストの許可不許可、エ
              ラー処理ができます




12年7月23日月曜日
session:peer:didChangeState:




              繋がったり切れたりと、状態が変化すると呼び出
              されます

12年7月23日月曜日
GKPeerConnectionState

              GKPeerStateAvailable(接続が使用可能)
              GKPeerStateUnavailable(接続が使用不可能)
              GKPeerStateConnected(接続した)
              GKPeerStateDisconnected(切断した)
              GKPeerStateConnecting(接続中)
              それぞれ変化した時に呼ばれます



12年7月23日月曜日
session:didReceiveConnectionRequest
              FromPeer:




              接続リクエストがあった時に呼ばれます
              許可するならGKSessionの
              acceptConnectionFromPeer:error:を、許可しない
              ならdenyConnectionFromPeer:を呼び出します




12年7月23日月曜日
connectionErrorFailed&didFailWithError




              接続先との通信に失敗した時など、接続・通信エ
              ラーが発生すると呼ばれます




12年7月23日月曜日
まとめ


              結構簡単にできたと思います(当社比)
              応用すれば何でも送信できると思います
              是非チャレンジしてみてください!




12年7月23日月曜日
参考資料
              GameKit プログラミングガイド

                https://developer.apple.com/jp/devcenter/ios/library/documentation/
                GameKit_Guide.pdf

              【iOS4】初めてのBluetoothプログラミング - おいしいCocoaの飲み方

                http://ip7.biz/wordpress/?p=260

              Cocoaの日々: [iOS] GameKit - Bluetoothを使った iOSデバイス間の通信

                http://cocoadays.blogspot.jp/2010/12/gamekit-bluetooth-ios.html

              iPhone Bluetoothプログラミング / DevX - インターネットコム コラム

                http://japan.internet.com/column/developer/20100216/26.html


12年7月23日月曜日

More Related Content

Similar to GameKitを使ったBluetoothプログラミング

Cocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_enCocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_en
Ricardo Quesada
 
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
Keigo Ando
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Takuya Fujimura
 
WordPress 3.5 目覚めし8つの新機能
WordPress 3.5 目覚めし8つの新機能WordPress 3.5 目覚めし8つの新機能
WordPress 3.5 目覚めし8つの新機能
Odyssey Eightbit
 

Similar to GameKitを使ったBluetoothプログラミング (20)

Storyboard
StoryboardStoryboard
Storyboard
 
Cocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_enCocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_en
 
とある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組みとある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組み
 
Three.jsで3D気分
Three.jsで3D気分 Three.jsで3D気分
Three.jsで3D気分
 
three.js はじめましょ
three.js はじめましょthree.js はじめましょ
three.js はじめましょ
 
DevCloud Installation and Some Hack
DevCloud Installation and Some HackDevCloud Installation and Some Hack
DevCloud Installation and Some Hack
 
GContractsの基礎
GContractsの基礎GContractsの基礎
GContractsの基礎
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用
 
Web GLの話
Web GLの話Web GLの話
Web GLの話
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
 
Gtic版 注目のイスラエルのテクノロジーベンチャー紹介&取り組み方の提案
Gtic版 注目のイスラエルのテクノロジーベンチャー紹介&取り組み方の提案Gtic版 注目のイスラエルのテクノロジーベンチャー紹介&取り組み方の提案
Gtic版 注目のイスラエルのテクノロジーベンチャー紹介&取り組み方の提案
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらFlashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
 
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
【第5回】渋谷Unity技術勉強会 - WebPlayer面白いよ!
 
DevOps Platform for Agile Cloud Application - Wakame-VDC Overview
DevOps Platform for Agile Cloud Application - Wakame-VDC OverviewDevOps Platform for Agile Cloud Application - Wakame-VDC Overview
DevOps Platform for Agile Cloud Application - Wakame-VDC Overview
 
すごいぞ!Google Chrome
すごいぞ!Google Chromeすごいぞ!Google Chrome
すごいぞ!Google Chrome
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能
 
Heroku入門
Heroku入門Heroku入門
Heroku入門
 
Mecha-Mozilla
Mecha-MozillaMecha-Mozilla
Mecha-Mozilla
 
WordPress 3.5 目覚めし8つの新機能
WordPress 3.5 目覚めし8つの新機能WordPress 3.5 目覚めし8つの新機能
WordPress 3.5 目覚めし8つの新機能
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報
 

Recently uploaded

Recently uploaded (9)

Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 

GameKitを使ったBluetoothプログラミング

  • 1. GameKitを使った 楽しい Bluetoothプログラミング @taiko19xx on SWWDC 2012/7/21 12年7月23日月曜日
  • 2. 自己紹介 木村 俊彦(@taiko19xx) Webデザイン系学校の学生 就職先探してます☆ ぶろぐ http://tnfront.net/ 12年7月23日月曜日
  • 3. 自己紹介 iPhone開発歴 2年ぐらい 自称ゆるゆる開発者 アプリ BTGPS GPS2Photo(New!) 12年7月23日月曜日
  • 5. Bluetoothとは おなじみの近距離無線通信技術 iPhone・iPadは全世代、Touchは第二世代から 省電力 バージョンやプロファイルが様々 今回は気にしません 12年7月23日月曜日
  • 6. iOSのBluetooth通信 GameKitを使った通信 主に使われるフレームワーク 今のところこれしかない? CoreBluetooth(Bluetooth 4.0搭載機のみ) 12年7月23日月曜日
  • 7. GameKitとは “ゲーム向け”のフレームワーク GameCenter(iOS 4.1∼) Peer-to-Peer Connectivity(iPhoneOS 3.0∼) In-Game Voice(同上) 今回はPeer-to-Peer Connectivityのお話 12年7月23日月曜日
  • 9. 検索から接続確立まで GKPeerPickerControllerを使う 検索から接続までやってくれるので楽 一対一の接続に限る GKPeerPickerControllerを使わない 検索や接続を自前で実装する必要がある 一対多や”すれちがい通信”ができるようになる 今回はGKPeerPickerController使います 12年7月23日月曜日
  • 10. GKPeerPickerController UIImagePickerControllerとそっくりです 12年7月23日月曜日
  • 11. connectionTypesMask GKPeerPickerConnectionTypeNearby(Bluetooth)と GKPeerPickerConnectionTypeOnline(WiFi)がある TypeOnlineは接続処理を自前で実装する必要があ る TypeOnlineのみの指定はできず、TypeNearbyと セットです 12年7月23日月曜日
  • 12. show こんな画面が出てきて探索が始まります 見つかると一覧が表示されます 12年7月23日月曜日
  • 13. show 選択すると、選択された側で許可するかを聞かれ ます 12年7月23日月曜日
  • 14. 許可orキャンセル後 許可すると peerPickerController:didConnectPeer:toSession: キャンセルするとpeerPickerControllerDidCancel: それぞれGKPeerPickerControllerDelegateのメソッ ドが呼び出されます 12年7月23日月曜日
  • 15. GKPeerPickerController Delegate 実装 12年7月23日月曜日
  • 16. peerPickerController:didConnectPeer:t oSession: currentSession(GKSession)は接続中のセッション setDataReceiveHandler:withContextを書かないと 受信時に何も呼ばれません 12年7月23日月曜日
  • 17. peerPickerControllerDidCancel: 最低限、pickerを解放するだけ dismissは自動で実行されます 12年7月23日月曜日
  • 19. 送受信まで 送信 GKSessionの sendDataToAllPeers:withDataMode:error:を呼び 出す 受信 receiveData:fromPeer:inSession:context:が呼び 出される setDataReceiveHandler:withContextを書き忘れ ていると呼び出されません 12年7月23日月曜日
  • 20. sendDataToAllPeers:withDataMode:err or NSDataにして送ります sendData:toPeers:withDataMode:errorを使えば特 定の接続先に送信できます 12年7月23日月曜日
  • 21. withDataMode(Data Transmission Mode) GKSendDataReliable 大容量データなど確実に送信する必要がある場 合に使う GKSendDataUnreliable すぐに到着する必要がある場合に使いますが、 再送信されません あまり気にせずReliableでいいと思います 12年7月23日月曜日
  • 22. receiveData:fromPeer:inSession:contex t もちろんNSDataで入ってきます このメソッド内で非常に長い処理をするべきでは ない(らしい) 12年7月23日月曜日
  • 24. 切断 disconnectFromAllPeers すべての接続先から切断 disconnectPeerFromAllPeers:で特定の接続先から 切断できます 12年7月23日月曜日
  • 26. GKSessionDelegate session:peer:didChangeState session:didReceiveConnectionRequestFromPeer session:connectionWithPeerFailed:withError: session:didFailWithError 接続状態の判定やリクエストの許可不許可、エ ラー処理ができます 12年7月23日月曜日
  • 27. session:peer:didChangeState: 繋がったり切れたりと、状態が変化すると呼び出 されます 12年7月23日月曜日
  • 28. GKPeerConnectionState GKPeerStateAvailable(接続が使用可能) GKPeerStateUnavailable(接続が使用不可能) GKPeerStateConnected(接続した) GKPeerStateDisconnected(切断した) GKPeerStateConnecting(接続中) それぞれ変化した時に呼ばれます 12年7月23日月曜日
  • 29. session:didReceiveConnectionRequest FromPeer: 接続リクエストがあった時に呼ばれます 許可するならGKSessionの acceptConnectionFromPeer:error:を、許可しない ならdenyConnectionFromPeer:を呼び出します 12年7月23日月曜日
  • 30. connectionErrorFailed&didFailWithError 接続先との通信に失敗した時など、接続・通信エ ラーが発生すると呼ばれます 12年7月23日月曜日
  • 31. まとめ 結構簡単にできたと思います(当社比) 応用すれば何でも送信できると思います 是非チャレンジしてみてください! 12年7月23日月曜日
  • 32. 参考資料 GameKit プログラミングガイド https://developer.apple.com/jp/devcenter/ios/library/documentation/ GameKit_Guide.pdf 【iOS4】初めてのBluetoothプログラミング - おいしいCocoaの飲み方 http://ip7.biz/wordpress/?p=260 Cocoaの日々: [iOS] GameKit - Bluetoothを使った iOSデバイス間の通信 http://cocoadays.blogspot.jp/2010/12/gamekit-bluetooth-ios.html iPhone Bluetoothプログラミング / DevX - インターネットコム コラム http://japan.internet.com/column/developer/20100216/26.html 12年7月23日月曜日