狠狠撸
Submit Search
Apple Watch 間通信
?
22 likes
?
10,636 views
Shuichi Tsutsumi
Follow
1 of 88
Download now
Download to read offline
More Related Content
Apple Watch 間通信
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.
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连)
5.
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连) WatchMe(Pocket Supernova) ? Watch
に最適化されたビデオメッセージングア プリ。ウォッチで動画メッセージのプレビュー、 素早い返信ができる ※お手伝いしたのは開発の初期、ウォッチ側
6.
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连) よしだっち(DLE) 鷹の爪団の吉田君を育成するアプリ WatchMe(Pocket Supernova) ? Watch
に最適化されたビデオメッセージングア プリ。ウォッチで動画メッセージのプレビュー、 素早い返信ができる ※お手伝いしたのは開発の初期、ウォッチ側
7.
お手伝いしたプロダクト(奥补迟肠丑碍颈迟関连) よしだっち(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
的な础笔滨はない
46.
Point 3: ローカル通知 ? openParent~はあるけど openChild
的な础笔滨はない → parent app からローカル通知を 発行してウォッチ側で受け取って もらう
47.
Point 3: ローカル通知 ? openParent~はあるけど openChild
的な础笔滨はない → 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です
Download