Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Watch connectivity

13,304 views

Published on

Published in: Technology

Watch connectivity

  1. 1. Watch Connectivityについて 成田 元輝
  2. 2. 自己紹介
  3. 3. 自己紹介 • 成田元輝(@mo_to_44) • 株式会社ネクストでHOME SのiOS アプリを開発しています
  4. 4. 引越しの際に使っ ていただけると 嬉しいです! HOME Sアプリ作ってます!
  5. 5. Apple Watch対応! 現在地から家賃相場を検索したり、 全国の家賃相場を当てる家賃相場 クイズ機能!
  6. 6. WWDC2015行ってきました!
  7. 7. WWDC ホテルがなかった で検索すると ブログが出てくるので読んでみてください
  8. 8. Watch Connectivity
  9. 9. watchOS1をおさらい
  10. 10. watchOS1のiPhoneとAppleWatch WatchKit App iOS App WatchKit Extension watchOS 1 Data Store Introducing Watch Connectivityより
  11. 11. watchOS1まで • ExtensionがiPhone側にあった • 基本的にiPhoneで処理される • データもiPhone側に置かれていた(Apple Watch 側に置かれるのはStoryboardとリソースファイル のみ) • iPhoneからデータを取って来る際は openParentApplication:を使用していた
  12. 12. watchOS2から
  13. 13. watchOS2からのiPhoneとAppleWatch Introducing Watch Connectivityより iOS App WatchKit App WatchKit Extension watchOS 2 Data Store Data Store
  14. 14. watchOS2から • ExtensionがAppleWatchに置かれ るようになった→ネイティブ! • Watch側にデータが保存可能に! • iPhoneからデータを取って来る際は WatchConnectivityを使う
  15. 15. Introducing Watch Connectivityより WatchConnectivity NSURLSession
  16. 16. WatchConnectivity • iPhone ⇄ Apple Watchでデータのやり取 りを可能にする • リアルタイムでの通信とバックグラウンド での通信の2種類
  17. 17. Watch Connectivity で検索すればリファレンス見つかります https://developer.apple.com/library/prerelease/ios/documentation/WatchConnectivity/Reference/WatchConnectivity_framework/index.html
  18. 18. WatchConnectivity.Frameworkに
 含まれるクラス
  19. 19. WCSession
 &
 WCSessionDelegate
  20. 20. WCSession • データ通信を可能にするにはセッションを アクティベートする必要がある • iPhoneとApple Watchの接続状態をトラッ キングするためのプロパティが定義されて いる
  21. 21. WCSessionを開始 Introducing Watch Connectivityより Setup Always set your apps up to receive incoming WatchConnectivity content if (WCSession.isSupported()) { let session = WCSession.defaultSession() session.delegate = self // conforms to WCSessionDelegate session.activateSession()
 }
  22. 22. WCSessionDelegate • iPhone or Apple Watchから送信したデータをApple Watch or iPhoneで受け取るデリゲートメソッド • WCSessionオブジェクトの状態変わったことを確認 するためのデリゲートメソッド • データ転送が終わったタイミングを知るためのデリ ゲートメソッド
  23. 23. iPhoneとApple Watchの
 接続状態を知る
  24. 24. • paird
 → iPhoneとApple Watchがペアリングさ れているか • watchAppInstalled
 → そのアプリのWatch appがインストー ルされているか 接続状態を知るための
 WCSessionのプロパティ
  25. 25. • complicationEnabled
 → complicationがApple Watchのフェイ スに設定されているか • reachable
 → 対応するiPhoneアプリ/Watch appがア クティブで通信可能な状態になっているか 接続状態を知るための
 WCSessionのプロパティ
  26. 26. • sessionWatchStateDidChange
 → paired, watchAppInstalled, complicationEnabled, watchDirectoryURLなど に変化があった際に呼ばれる • sessionReachabilityDidChange
 → 対になるアプリのreachabilityに変化があった際 に呼ばれる 接続状態が変わったことを受け取る
 WCSessionDelegateのデリゲートメソッド
  27. 27. iPhone⇄Apple Watch
 データのやり取り
  28. 28. データを送る方法 • Background Transfers • Interactive Messaging
  29. 29. • OSがいい感じのタイミングで転送し てくれるらしい Background Transfers
  30. 30. Interactive Messaging • すぐに転送してくれる
  31. 31. • Application Context • User Info Transfer • File Transfer Background Transfers
  32. 32. Background Transfers Application Context • 押さえておくべきこと • 更新すると上書きされる • Dictionary([String:AnyObject])型のデータが格納可能 • session:didReceiveApplicationContextで対 になるアプリからのデータを受け取る
  33. 33. Background Transfers Application Context • updateApplicationContext:error:メソッドを使用して applicationContextを更新 • WCSessionオブジェクトのapplicationContextプロパティで updateApplicationContext:error:で送ったデータの確認が可能 • updateApplicationContext:error:を呼ぶごとにデータが上書きされる • session:didReceiveApplicationContextで対になるアプリからのデー タを受け取る
  34. 34. Background Transfers • 押さえておくべきこと • Application Contextと異なり上書きされずキューイ ングされる • Dictionary([String:AnyObject])型のデータが格納可能 • session:didReceiveUserInfo:で対になるアプリから のデータを受け取る User Info Transfer
  35. 35. Background Transfers User Info Transfer • transferUserInfo:メソッドを使用してデータをキューイングする • WCSessionオブジェクトのoutstandingUserInfoTransfersプロパティで キューイングされているデータを確認することが可能 • WCSessionUserInfoTransferというオブジェクトで outstandingUserInfoTransfersプロパティに保存されている • session:didReceiveUserInfo:で対になるアプリからのデータを受け取る • session:didFinishUserInfoTransfer:error:で転送完了、あるいはエラーが 発生した場合の処理
  36. 36. Background Transfers • 押さえておくべきこと • キューイングなどはUserInfoと基本的に同じ • ファイルの転送が可能 • メタデータを付与することが可能([String:AnyObject]) • session:didReceiveFile:で対になるアプリからのデータを 受け取る File Transfer
  37. 37. Background Transfers File Transfer • transferFile:メソッドを使用してファイルの送信が可能 • データ容量の大きいファイル(画像、ドキュメントなど)を転送したい場合に転送する • WCSessionオブジェクトのoutstandingFileTransfersプロパティでキューイングされて いるデータを確認することが可能 • WCSessionFileTransferというオブジェクトでoutstandingFileTransfersプロパティに保 存されている • session:didReceiveFile:で対になるアプリからのデータを受け取る • session:didFinishFileTransfer:error:で転送完了、あるいはエラーが発生した場合の処理 をする
  38. 38. Interactive Messaging
  39. 39. Interactive Messaging • リアルタイムにやり取りができる • テキストのやり取りだけでなく、画像などのデータのやり取りも 可能(大きすぎるデータはダメ) • iPhone/Apple Watchが通信可能な状態(reachable)であること が条件 • Apple Watch→iPhoneの場合のみ、iPhoneアプリをBackground で動作させることが可能
  40. 40. 通信可能な状態とは? • iPhone側でWCSessionオブジェクトの reachable=trueになるのは、Bluetoothで Apple Watchと通信が可能な状態で、なお かつWatch appがフォアグラウンドにある 状態
  41. 41. iPhone側でreachableな状態 Interactive Messaging Reachability:iPhone Devices connected Watch app foreground iOS App Watch App session.reachable == true Introducing Watch Connectivityより
  42. 42. 通信可能な状態とは? • Apple Watch側でWCSessionオブジェク トのreachable=trueになるのは、 BluetoothでiPhoneと通信が可能な状態
 →iPhoneアプリがフォアグラウンドであるかどうかは関係ない
  43. 43. Interactive Messaging Devices connected WatchKit extension foreground Watch App WatchKit Extension session.reachable == true Reachability:Apple Watch Apple Watch側でreachableな状態 Introducing Watch Connectivityより
  44. 44. iOSはバックグラウンド動作可能 • Apple Watch → iPhoneの場合はiPhone をバックグラウンドで動作させることが可 能 • watchOS1のopenParentApplication:と 同じようにデータを取ってくることも可能
  45. 45. Interactive Messaging Interactive Messaging Background launching:iOS app only Run Tracker App WatchKit Extension iOS App Background Introducing Watch Connectivityより
  46. 46. Interactive Messaging • 送信可能なデータ • Dictionary([String:AnyObject])型のデータが格 納可能 • NSData=画像なども送信可能
  47. 47. Interactive Messaging • 以下のメソッドを使用してデータ送信 • sendMessage:replyHandler:errorHandler: • sendMessageData:replyHandler:errorHandler:
  48. 48. Interactive Messaging • 以下のメソッドを使用してデータを受け取る • session:didReceiveMessage: • session:didReceiveMessage:replyHandler: • session:didReceiveMessageData: • session:didReceiveMessageData:replyHandler:
  49. 49. Interactive Messaging • 以下のメソッドを使用してデータを受け取る • session:didReceiveMessage: • session:didReceiveMessage:replyHandler: • session:didReceiveMessageData: • session:didReceiveMessageData:replyHandler: replyHandlerを利用して通信結果などの情報を送信側に
 返した方が良さそう
  50. 50. • 押さえておくべきこと • データ送信前に通信可能であること (=reachable)であることを確認する • Apple Watch→iPhoneの場合はiOSアプリを バックグランドで動作させることが可能 • Dictionary([String:AnyObject])に加えて、NSData 型データの送信も可能 Interactive Messaging
  51. 51. おわり

×