Apple Watch 間通信
-
Upload
shuichi-tsutsumi -
Category
Technology
-
view
4.127 -
download
3
Transcript of Apple Watch 間通信
• 堤 修一(つつみ しゅういち)
• iOS専業フリーランス
• ブログ『Over&Out その後』
• 著書『iOS×BLE Core Bluetoothプログラミング』『iOSアプリ開発 達人のレシピ100』
自己紹介
お手伝いしたプロダクト(WatchKit関連)
WatchMe(Pocket Supernova) Watch に最適化されたビデオメッセージングアプリ。ウォッチで動画メッセージのプレビュー、素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
お手伝いしたプロダクト(WatchKit関連)
よしだっち(DLE)
鷹の爪団の吉田君を育成するアプリ
WatchMe(Pocket Supernova) Watch に最適化されたビデオメッセージングアプリ。ウォッチで動画メッセージのプレビュー、素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
お手伝いしたプロダクト(WatchKit関連)
よしだっち(DLE)
鷹の爪団の吉田君を育成するアプリ
WatchMe(Pocket Supernova) Watch に最適化されたビデオメッセージングアプリ。ウォッチで動画メッセージのプレビュー、素早い返信ができる
※お手伝いしたのは開発の初期、ウォッチ側
メール、Facebookメッセージ、TwitterのDM等を一元管理するアプリ
Swingmail(BHI)
※ウォッチ機能は現在開発中
標準で入ってる “Digital Touch” 機能
- タップ、心拍、手書きスケッチを相手に送れる
WatchKitにそういうAPIはない
→ サードパーティ製アプリで同様のことをやるには?
Apple Watch 同士で通信する方法を探る
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~による非同期処理実行• Core Bluetooth は非同期でレスポンスが返ってくる処理ばかり
• openParent~は親アプリからのレスポンスを受け取れるが、同期処理なので非同期処理の結果は受け取れない
Point 2:
openParent~による非同期処理実行• Core Bluetooth は非同期でレスポンスが返ってくる処理ばかり
• openParent~は親アプリからのレスポンスを受け取れるが、同期処理なので非同期処理の結果は受け取れない
→ WatchKit Extension側から結果を受け取れるまでポーリングする
- 詳細:『WatchKit もろもろ実機検証』(実装コードあり)
Point 3:
ローカル通知• openParent~はあるけど
openChild 的なAPIはない
→ parent app からローカル通知を発行してウォッチ側で受け取ってもらう
Watchのローカル通知に対する挙動:『WatchKit もろもろ実機検証』(実装コードあり)
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測 (HealthKitに自動保存)
②openParent~ で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
④バックグラウンドで送信
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測 (HealthKitに自動保存)
②openParent~ で心拍を送りたい旨だけ伝える
③HealthKit より心拍数取得
⑤ローカル通知
④バックグラウンドで送信
HealthKit を利用
心拍を送りたい
自分 相手
①心拍数計測 (HealthKitに自動保存)
②openParent~ で心拍を送りたい旨だけ伝える
③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]
• presentTextInputControllerWith~で、AllowEmoji / AllowAnimatedEmoji を指定
• 選択すると絵文字の画像データを表す大量のバイナリデータが返ってくる
• BLEでは(基本的に)1パケット20バイト
→ 種類は限られているので、オレオレ文字コードを定義して送り合えばOKかと
サードパーティ製アプリで 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です