Your SlideShare is downloading. ×

Apple Watch 間通信

287

Published on

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
287
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Apple Watch 間通信 堤 修一 @shu223 2015.5.27 Apple Watch meetup
  • 2. • 堤 修一(つつみ しゅういち) • iOS専業フリーランス • ブログ『Over&Out その後』 • 著書
 『iOS×BLE Core Bluetoothプログラミング』
 『iOSアプリ開発 達人のレシピ100』 自己紹介
  • 3. お手伝いしたプロダクト(BLE関連) Music for the Deaf
  • 4. お手伝いしたプロダクト(WatchKit関連)
  • 5. お手伝いしたプロダクト(WatchKit関連) WatchMe(Pocket Supernova)  Watch に最適化されたビデオメッセージングア プリ。ウォッチで動画メッセージのプレビュー、 素早い返信ができる ※お手伝いしたのは開発の初期、ウォッチ側
  • 6. お手伝いしたプロダクト(WatchKit関連) よしだっち(DLE) 鷹の爪団の吉田君を育成するアプリ WatchMe(Pocket Supernova)  Watch に最適化されたビデオメッセージングア プリ。ウォッチで動画メッセージのプレビュー、 素早い返信ができる ※お手伝いしたのは開発の初期、ウォッチ側
  • 7. お手伝いしたプロダクト(WatchKit関連) よしだっち(DLE) 鷹の爪団の吉田君を育成するアプリ WatchMe(Pocket Supernova)  Watch に最適化されたビデオメッセージングア プリ。ウォッチで動画メッセージのプレビュー、 素早い返信ができる ※お手伝いしたのは開発の初期、ウォッチ側 メール、Facebookメッセージ、TwitterのDM等を一 元管理するアプリ Swingmail(BHI) ※ウォッチ機能は現在開発中
  • 8. 今日話すこと
  • 9. Apple Watch 同士で通信する方法を探る
  • 10. 標準で入ってる“Digital Touch”機能 Apple Watch 同士で通信する方法を探る
  • 11. 標準で入ってる“Digital Touch”機能 - タップ、心拍、手書きスケッチを相手に送れる Apple Watch 同士で通信する方法を探る
  • 12. 標準で入ってる“Digital Touch”機能 - タップ、心拍、手書きスケッチを相手に送れる Apple Watch 同士で通信する方法を探る
  • 13. 標準で入ってる“Digital Touch”機能 - タップ、心拍、手書きスケッチを相手に送れる Apple Watch 同士で通信する方法を探る
  • 14. 標準で入ってる“Digital Touch”機能 - タップ、心拍、手書きスケッチを相手に送れる WatchKitにそういうAPIはない Apple Watch 同士で通信する方法を探る
  • 15. 標準で入ってる“Digital Touch”機能 - タップ、心拍、手書きスケッチを相手に送れる WatchKitにそういうAPIはない → サードパーティ製アプリで同様のことをやるには? Apple Watch 同士で通信する方法を探る
  • 16.
  • 17. この構成で同様のことはできそう
  • 18. この構成で同様のことはできそう 自分 parent
  • 19. この構成で同様のことはできそう 自分 parent 相手 parent
  • 20. この構成で同様のことはできそう 自分 parent 相手 parent バックグラウンド通信
  • 21. この構成で同様のことはできそう 通信してる感 自分 parent 相手 parent バックグラウンド通信
  • 22. この構成で同様のことはできそう → つくってみたらうまくいった 通信してる感 自分 parent 相手 parent バックグラウンド通信
  • 23. 通信処理の流れ
  • 24. 自分 相手 メッセージを送りたい
  • 25. 自分 相手 メッセージを送りたい openParentApplication:reply: でメッセージを渡す
  • 26. バックグラウンドで送信 (Core Bluetooth) 自分 相手 メッセージを送りたい openParentApplication:reply: でメッセージを渡す
  • 27. バックグラウンドで送信 (Core Bluetooth) 自分 相手 メッセージを送りたい ローカル通知 openParentApplication:reply: でメッセージを渡す
  • 28. ポイント
  • 29. Point 1: Core Bluetooth を用いた通信
  • 30. Point 1: Core Bluetooth を用いた通信
  • 31. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用
  • 32. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能
  • 33. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能 • ステータス確認・スキャン・アドバタイズ・ 接続確立・データのやり取り等、ほぼすべて の機能がバックグラウンドで利用可能
  • 34. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能 • ステータス確認・スキャン・アドバタイズ・ 接続確立・データのやり取り等、ほぼすべて の機能がバックグラウンドで利用可能 - UX的にはparent appでの処理と悟られない
  • 35. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能 • ステータス確認・スキャン・アドバタイズ・ 接続確立・データのやり取り等、ほぼすべて の機能がバックグラウンドで利用可能 - UX的にはparent appでの処理と悟られない - 1度接続すれば、あとは接続が切れても バックグラウンドで勝手に再接続される
  • 36. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能 • ステータス確認・スキャン・アドバタイズ・ 接続確立・データのやり取り等、ほぼすべて の機能がバックグラウンドで利用可能 - UX的にはparent appでの処理と悟られない - 1度接続すれば、あとは接続が切れても バックグラウンドで勝手に再接続される - プロセスが死んでてもゾンビのように復活 して繋がってくれる
  • 37. Point 1: Core Bluetooth を用いた通信 • BLE(Bluetooth Low Energy) を利用 - WiFi等のインフラなしで通信可能 • ステータス確認・スキャン・アドバタイズ・ 接続確立・データのやり取り等、ほぼすべて の機能がバックグラウンドで利用可能 - UX的にはparent appでの処理と悟られない - 1度接続すれば、あとは接続が切れても バックグラウンドで勝手に再接続される - プロセスが死んでてもゾンビのように復活 して繋がってくれる • 詳細はこちら: 『殺しても死なないアプリ』(potatotips #17 での発表)
  • 38. Point 2: openParent∼による非同期処理実行
  • 39. Point 2: openParent∼による非同期処理実行
  • 40. Point 2: openParent∼による非同期処理実行 • Core Bluetooth は非同期でレス ポンスが返ってくる処理ばかり
  • 41. Point 2: openParent∼による非同期処理実行 • Core Bluetooth は非同期でレス ポンスが返ってくる処理ばかり • openParent∼は親アプリからの レスポンスを受け取れるが、同 期処理なので非同期処理の結果 は受け取れない
  • 42. Point 2: openParent∼による非同期処理実行 • Core Bluetooth は非同期でレス ポンスが返ってくる処理ばかり • openParent∼は親アプリからの レスポンスを受け取れるが、同 期処理なので非同期処理の結果 は受け取れない → WatchKit Extension側から結果を受け取れるまでポーリングする - 詳細:『WatchKit もろもろ実機検証』(実装コードあり)
  • 43. Point 3: ローカル通知
  • 44. Point 3: ローカル通知
  • 45. Point 3: ローカル通知 • openParent∼はあるけど openChild 的なAPIはない
  • 46. Point 3: ローカル通知 • openParent∼はあるけど openChild 的なAPIはない → parent app からローカル通知を 発行してウォッチ側で受け取って もらう
  • 47. Point 3: ローカル通知 • openParent∼はあるけど openChild 的なAPIはない → parent app からローカル通知を 発行してウォッチ側で受け取って もらう Watchのローカル通知に対する挙動:
 『WatchKit もろもろ実機検証』(実装コードあり)
  • 48. 心拍を送るには?
  • 49. 心拍を送るには? WatchKit では直接心拍センサの値に アクセスするAPIはない
  • 50. HealthKit を利用 心拍を送りたい 自分 相手
  • 51. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存)
  • 52. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存) ②openParent∼ で心拍を送りたい旨だけ伝える
  • 53. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存) ②openParent∼ で心拍を送りたい旨だけ伝える ③HealthKit より心拍数取得
  • 54. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存) ②openParent∼ で心拍を送りたい旨だけ伝える ③HealthKit より心拍数取得 ④バックグラウンドで送信
  • 55. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存) ②openParent∼ で心拍を送りたい旨だけ伝える ③HealthKit より心拍数取得 ⑤ローカル通知 ④バックグラウンドで送信
  • 56. HealthKit を利用 心拍を送りたい 自分 相手 ①心拍数計測 (HealthKitに自動保存) ②openParent∼ で心拍を送りたい旨だけ伝える ③HealthKit より心拍数取得 ⑤ローカル通知 心拍数に応じた速さで アニメーションを実行 ④バックグラウンドで送信
  • 57. ウォッチで計測した心拍数をリアルタイムに iPhone 側で HealthKit から取得できるのか?
  • 58. ウォッチで計測した心拍数をリアルタイムに iPhone 側で HealthKit から取得できるのか? • 心拍数の単位は“BPM”(Beats Per Minute) なので60秒ぐらい までのタイムラグは許容範囲 かと
  • 59. ウォッチで計測した心拍数をリアルタイムに iPhone 側で HealthKit から取得できるのか? • 心拍数の単位は“BPM”(Beats Per Minute) なので60秒ぐらい までのタイムラグは許容範囲 かと •  Watch で心拍数を計測しつ つ、iPhone の Health アプリで 最新データがいつ取得できる か確認してみた
  • 60. ウォッチで計測した心拍数をリアルタイムに iPhone 側で HealthKit から取得できるのか? • 心拍数の単位は“BPM”(Beats Per Minute) なので60秒ぐらい までのタイムラグは許容範囲 かと •  Watch で心拍数を計測しつ つ、iPhone の Health アプリで 最新データがいつ取得できる か確認してみた [Health Data] > [Vitals] > [Heart Rate] > [Show All Data]
  • 61. ウォッチで計測した心拍数をリアルタイムに iPhone 側で HealthKit から取得できるのか? • 心拍数の単位は“BPM”(Beats Per Minute) なので60秒ぐらい までのタイムラグは許容範囲 かと •  Watch で心拍数を計測しつ つ、iPhone の Health アプリで 最新データがいつ取得できる か確認してみた → ほぼタイムラグなし
  (多く見ても10秒以内) [Health Data] > [Vitals] > [Heart Rate] > [Show All Data]
  • 62. デモ
  • 63. (デモの流れ:Watch間メッセージ送信) 自分 相手
  • 64. (デモの流れ:Watch間メッセージ送信) ①Watch アプリ起動 自分 相手
  • 65. (デモの流れ:Watch間メッセージ送信) ①Watch アプリ起動 ②ボタンタップ 自分 相手
  • 66. (デモの流れ:Watch間メッセージ送信) ①Watch アプリ起動 ②ボタンタップ ③メッセージ選択、 または音声入力 自分 相手
  • 67. (デモの流れ:Watch間メッセージ送信) ①Watch アプリ起動 ②ボタンタップ ③メッセージ選択、 または音声入力 自分 相手 (バックグラウンド通信)
  • 68. (デモの流れ:Watch間メッセージ送信) ①Watch アプリ起動 ②ボタンタップ ③メッセージ選択、 または音声入力 自分 相手 (バックグラウンド通信) メッセージ受信!
  • 69. (デモの流れ:Watch間で心拍数共有) 自分 相手
  • 70. (デモの流れ:Watch間で心拍数共有) ①Watch アプリ起動 自分 相手
  • 71. (デモの流れ:Watch間で心拍数共有) ①Watch アプリ起動 ②ボタンタップ 自分 相手
  • 72. (デモの流れ:Watch間で心拍数共有) ①Watch アプリ起動 ②ボタンタップ 自分 相手 (バックグラウンド通信)
  • 73. (デモの流れ:Watch間で心拍数共有) ①Watch アプリ起動 ②ボタンタップ 自分 相手 (バックグラウンド通信) 心拍数表示& アニメーション
  • 74. 絵文字を送るには? (※試していないのであくまで仮説です)
  • 75. • presentTextInputControllerWith∼で、
 AllowEmoji / AllowAnimatedEmoji を指定 • 選択すると絵文字の画像データを表す大量のバイナ リデータが返ってくる • BLEでは(基本的に)1パケット20バイト → 種類は限られているので、オレオレ文字コードを 定義して送り合えばOKかと
  • 76. まとめ・所感
  • 77. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
  • 78. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは?
  • 79. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
  • 80. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能
  • 81. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる
  • 82. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない
  • 83. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない • 苦しい点
  • 84. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない • 苦しい点 • ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない)
  • 85. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない • 苦しい点 • ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない) • タップは受信側が無理(Taptic Engine を制御できない)
  • 86. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない • 苦しい点 • ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない) • タップは受信側が無理(Taptic Engine を制御できない) • 手描きスケッチも受信側が無理(あんなに滑らかに線を「動的に」描画できない)
  • 87. サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた → 意外とアリなのでは? • 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては ウォッチ同士通信している感がある(親アプリによる処理を感じさせない) • WiFiなどのインフラ不要、オフラインでも通信可能 • メッセージ、心拍、絵文字は送れる • 通信速度も悪くない • 苦しい点 • ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない) • タップは受信側が無理(Taptic Engine を制御できない) • 手描きスケッチも受信側が無理(あんなに滑らかに線を「動的に」描画できない) • 使いどころ(何に役立つのか?どんなアプリで嬉しいのか?)
  • 88. Core Bluetooth / BLE の参考書籍 • konashi開発者 松村礼央さんとの共著 • BLEについては知識ゼロからでOKです

×