狠狠撸

狠狠撸Share a Scribd company logo
Apple Watch 間通信
堤 修一 @shu223
2015.5.27 Apple Watch meetup
? 堤 修一(つつみ しゅういち)
? iOS専業フリーランス
? ブログ『Over&Out その後』
? 著書?
『iOS×BLE?Core Bluetoothプログラミング』?
『iOSアプリ開発 達人のレシピ100』
自己紹介
お手伝いしたプロダクト(BLE関連)
Music for the Deaf
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连)
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连)
WatchMe(Pocket Supernova)
? Watch に最適化されたビデオメッセージングア
プリ。ウォッチで動画メッセージのプレビュー、
素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连)
よしだっち(DLE)
鷹の爪団の吉田君を育成するアプリ
WatchMe(Pocket Supernova)
? Watch に最適化されたビデオメッセージングア
プリ。ウォッチで動画メッセージのプレビュー、
素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连)
よしだっち(DLE)
鷹の爪団の吉田君を育成するアプリ
WatchMe(Pocket Supernova)
? Watch に最適化されたビデオメッセージングア
プリ。ウォッチで動画メッセージのプレビュー、
素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
メール、Facebookメッセージ、TwitterのDM等を一
元管理するアプリ
Swingmail(BHI)
※ウォッチ機能は現在開発中
今日话すこと
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
- タップ、心拍、手書きスケッチを相手に送れる
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
- タップ、心拍、手書きスケッチを相手に送れる
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
- タップ、心拍、手書きスケッチを相手に送れる
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
- タップ、心拍、手書きスケッチを相手に送れる
WatchKitにそういうAPIはない
Apple Watch 同士で通信する方法を探る
標準で入ってる“Digital Touch”機能
- タップ、心拍、手書きスケッチを相手に送れる
WatchKitにそういうAPIはない
→ サードパーティ製アプリで同様のことをやるには?
Apple Watch 同士で通信する方法を探る
案
この构成で同様のことはできそう
この构成で同様のことはできそう
自分
parent
この构成で同様のことはできそう
自分
parent
相手
parent
この构成で同様のことはできそう
自分
parent
相手
parent
バックグラウンド通信
この构成で同様のことはできそう
通信してる感
自分
parent
相手
parent
バックグラウンド通信
この构成で同様のことはできそう
→ つくってみたらうまくいった
通信してる感
自分
parent
相手
parent
バックグラウンド通信
通信処理の流れ
自分 相手
メッセージを送りたい
自分 相手
メッセージを送りたい
openParentApplication:reply:
でメッセージを渡す
バックグラウンドで送信
(Core Bluetooth)
自分 相手
メッセージを送りたい
openParentApplication:reply:
でメッセージを渡す
バックグラウンドで送信
(Core Bluetooth)
自分 相手
メッセージを送りたい
ローカル通知
openParentApplication:reply:
でメッセージを渡す
ポイント
Point 1:
Core Bluetooth を用いた通信
Point 1:
Core Bluetooth を用いた通信
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
? ステータス確認?スキャン?アドバタイズ?
接続確立?データのやり取り等、ほぼすべて
の機能がバックグラウンドで利用可能
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
? ステータス確認?スキャン?アドバタイズ?
接続確立?データのやり取り等、ほぼすべて
の機能がバックグラウンドで利用可能
- UX的にはparent appでの処理と悟られない
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
? ステータス確認?スキャン?アドバタイズ?
接続確立?データのやり取り等、ほぼすべて
の機能がバックグラウンドで利用可能
- UX的にはparent appでの処理と悟られない
- 1度接続すれば、あとは接続が切れても
バックグラウンドで勝手に再接続される
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
? ステータス確認?スキャン?アドバタイズ?
接続確立?データのやり取り等、ほぼすべて
の機能がバックグラウンドで利用可能
- UX的にはparent appでの処理と悟られない
- 1度接続すれば、あとは接続が切れても
バックグラウンドで勝手に再接続される
- プロセスが死んでてもゾンビのように復活
して繋がってくれる
Point 1:
Core Bluetooth を用いた通信
? BLE(Bluetooth Low Energy) を利用
- WiFi等のインフラなしで通信可能
? ステータス確認?スキャン?アドバタイズ?
接続確立?データのやり取り等、ほぼすべて
の機能がバックグラウンドで利用可能
- UX的にはparent appでの処理と悟られない
- 1度接続すれば、あとは接続が切れても
バックグラウンドで勝手に再接続される
- プロセスが死んでてもゾンビのように復活
して繋がってくれる
? 詳細はこちら: 『殺しても死なないアプリ』(potatotips #17 での発表)
Point 2:
openParent~による非同期処理実行
Point 2:
openParent~による非同期処理実行
Point 2:
openParent~による非同期処理実行
? Core Bluetooth は非同期でレス
ポンスが返ってくる処理ばかり
Point 2:
openParent~による非同期処理実行
? Core Bluetooth は非同期でレス
ポンスが返ってくる処理ばかり
? openParent~は親アプリからの
レスポンスを受け取れるが、同
期処理なので非同期処理の結果
は受け取れない
Point 2:
openParent~による非同期処理実行
? Core Bluetooth は非同期でレス
ポンスが返ってくる処理ばかり
? openParent~は親アプリからの
レスポンスを受け取れるが、同
期処理なので非同期処理の結果
は受け取れない
→ WatchKit Extension側から結果を受け取れるまでポーリングする
- 詳細:『WatchKit もろもろ実機検証』(実装コードあり)
Point 3:
ローカル通知
Point 3:
ローカル通知
Point 3:
ローカル通知
? openParent~はあるけど
openChild 的な础笔滨はない
Point 3:
ローカル通知
? openParent~はあるけど
openChild 的な础笔滨はない
→ parent app からローカル通知を
発行してウォッチ側で受け取って
もらう
Point 3:
ローカル通知
? openParent~はあるけど
openChild 的な础笔滨はない
→ parent app からローカル通知を
発行してウォッチ側で受け取って
もらう
?Watchのローカル通知に対する挙動:?
『WatchKit もろもろ実機検証』(実装コードあり)
心拍を送るには?
心拍を送るには?
WatchKit では直接心拍センサの値に
アクセスするAPIはない
HealthKit を利用
心拍を送りたい
自分 相手
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
②openParent~
で心拍を送りたい旨だけ伝える
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
②openParent~
で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
②openParent~
で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
④バックグラウンドで送信
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
②openParent~
で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
⑤ローカル通知
④バックグラウンドで送信
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測
(HealthKitに自動保存)
②openParent~
で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
⑤ローカル通知
心拍数に応じた速さで
アニメーションを実行
④バックグラウンドで送信
ウォッチで計測した心拍数をリアルタイムに
iPhone 側で HealthKit から取得できるのか?
ウォッチで計測した心拍数をリアルタイムに
iPhone 側で HealthKit から取得できるのか?
? 心拍数の単位は“BPM”(Beats
Per Minute) なので60秒ぐらい
までのタイムラグは許容範囲
かと
ウォッチで計測した心拍数をリアルタイムに
iPhone 側で HealthKit から取得できるのか?
? 心拍数の単位は“BPM”(Beats
Per Minute) なので60秒ぐらい
までのタイムラグは許容範囲
かと
? ? Watch で心拍数を計測しつ
つ、iPhone の Health アプリで
最新データがいつ取得できる
か確認してみた
ウォッチで計測した心拍数をリアルタイムに
iPhone 側で HealthKit から取得できるのか?
? 心拍数の単位は“BPM”(Beats
Per Minute) なので60秒ぐらい
までのタイムラグは許容範囲
かと
? ? Watch で心拍数を計測しつ
つ、iPhone の Health アプリで
最新データがいつ取得できる
か確認してみた
[Health Data] > [Vitals]
> [Heart Rate] > [Show All Data]
ウォッチで計測した心拍数をリアルタイムに
iPhone 側で HealthKit から取得できるのか?
? 心拍数の単位は“BPM”(Beats
Per Minute) なので60秒ぐらい
までのタイムラグは許容範囲
かと
? ? Watch で心拍数を計測しつ
つ、iPhone の Health アプリで
最新データがいつ取得できる
か確認してみた
→ ほぼタイムラグなし?
?(多く見ても10秒以内) [Health Data] > [Vitals]
> [Heart Rate] > [Show All Data]
デモ
(デモの流れ:Watch間メッセージ送信)
自分 相手
(デモの流れ:Watch間メッセージ送信)
①Watch アプリ起動
自分 相手
(デモの流れ:Watch間メッセージ送信)
①Watch アプリ起動
②ボタンタップ
自分 相手
(デモの流れ:Watch間メッセージ送信)
①Watch アプリ起動
②ボタンタップ
③メッセージ選択、
または音声入力
自分 相手
(デモの流れ:Watch間メッセージ送信)
①Watch アプリ起動
②ボタンタップ
③メッセージ選択、
または音声入力
自分 相手
(バックグラウンド通信)
(デモの流れ:Watch間メッセージ送信)
①Watch アプリ起動
②ボタンタップ
③メッセージ選択、
または音声入力
自分 相手
(バックグラウンド通信)
メッセージ受信!
(デモの流れ:Watch間で心拍数共有)
自分 相手
(デモの流れ:Watch間で心拍数共有)
①Watch アプリ起動
自分 相手
(デモの流れ:Watch間で心拍数共有)
①Watch アプリ起動
②ボタンタップ
自分 相手
(デモの流れ:Watch間で心拍数共有)
①Watch アプリ起動
②ボタンタップ
自分 相手
(バックグラウンド通信)
(デモの流れ:Watch間で心拍数共有)
①Watch アプリ起動
②ボタンタップ
自分 相手
(バックグラウンド通信)
心拍数表示&
アニメーション
絵文字を送るには?
(※試していないのであくまで仮説です)
? presentTextInputControllerWith~で、?
AllowEmoji / AllowAnimatedEmoji を指定
? 選択すると絵文字の画像データを表す大量のバイナ
リデータが返ってくる
? BLEでは(基本的に)1パケット20バイト
→ 種類は限られているので、オレオレ文字コードを
定義して送り合えばOKかと
まとめ?所感
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
? 苦しい点
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
? 苦しい点
? ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない)
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
? 苦しい点
? ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない)
? タップは受信側が無理(Taptic Engine を制御できない)
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
? 苦しい点
? ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない)
? タップは受信側が無理(Taptic Engine を制御できない)
? 手描きスケッチも受信側が無理(あんなに滑らかに線を「動的に」描画できない)
サードパーティ製アプリで Apple Watch 同士で通信する方法を探ってみた
→ 意外とアリなのでは?
? 接続も送信もバックグラウンドで自動で行われるため、ユーザー体験としては
ウォッチ同士通信している感がある(親アプリによる処理を感じさせない)
? WiFiなどのインフラ不要、オフラインでも通信可能
? メッセージ、心拍、絵文字は送れる
? 通信速度も悪くない
? 苦しい点
? ローカル通知の制約(iPhoneの状態によってはウォッチ側で受け取ってくれない)
? タップは受信側が無理(Taptic Engine を制御できない)
? 手描きスケッチも受信側が無理(あんなに滑らかに線を「動的に」描画できない)
? 使いどころ(何に役立つのか?どんなアプリで嬉しいのか?)
Core Bluetooth / BLE の参考書籍
? konashi開発者 松村礼央さんとの共著
? BLEについては知識ゼロからでOKです

More Related Content

Apple Watch 間通信