2015年5月22日金曜日

Apple WatchとiPhoneアプリとの間で、データを共有する方法

watch-phone間において
データを共有する方法として、
僕が把握している限りでは、

1)openParentApplication:replyと、application:handleWatchKitExtensionRequest:replyを使う方法

App groupを使う方法
2)app group + NSUserDefault
3)file share = containerURLForSecurityApplicationGroupIdentifier
4)whormHole (app group)
5)realm

App group+Keychain
6)Parse

いうパターンがあるようです。
これらは順を追って記事にしていこうと考えていますが
今回は
1)openParentAplication:replyとapplication:handlewatchKitExtensionRequest:reply
を使った方法で、アプリ間のデータを共有に関して、エントリします。

エントリを書いた2015/05/22現在、Apple Watchのアプリは、iPhoneのアプリに付属した状態でしか作成できません。
通常のiphoneに加えて、WatchKit ExtensionとWatchKit Appを加えることで、Apple Watchに対応したiphoneアプリを作ることができます。

通常のiphoneアプリのプロジェクトに、WatchKit ExtensionとWatchKit Appを加えるのはとても簡単で、File > New > Targetとたどっていき、iOS下のApple Watchを選択すると、WatchKit Appを追加できると思います。

openParentApplication:replyはどうやって使うかというと、、
このメソッド、WatchKitに実装されている関数です。
リファレンスの説明には、
Open the containing iOS app and sends the specified data to it
と書いてありまして、iOSアプリを開けて、データを送ると書いてあります(ざっくり意訳)

もう一つ気をつけることが
Calling the method causes iOS to launch the app in the background (as needed) and call the application:handleWatchKitExtensionRequest:reply: method of its app delegate.

このメソッドを呼ぶと、iOSアプリが”バックグラウンド"で走り、handleWatchKitExtensionRequestが”AppDelegate”で呼ばれます
と書いてあります。

ということで、これらをわかりやすく実装してみました。
Apple Watch上のボタンを押すと、iPhone上のラベルが現れたり消えたりします。

わかりやすくするために、不要なものは極力入れてません。
まず、Apple Watch上のボタンを押すと、(シミュレーターでは、Hardware > External displayで、watchの画面を表示させてないとシミュレーションできません笑)
pushAbuttonか、pushBbuttonがコールされます。
これらの関数は、StoryBoardに配置したボタンからコードに向かってぴーって線を引っ張って作るタイプのアクションです。iOSアプリを作るのと同じ。

で、このアクションの中で、openParentApplicationをコールすることで、Apple WatchからiPhoneアプリへ、データを送ります。
このデータを受け取るのはhandleWatchKitExtensionRequest。
そのため、AppDelegateに、handleWatchKitExtensionRequestを実装する必要があります。
AppDelegateから、それぞれのViewControllerへデータを送るのは、いろいろ方法があると思うので、ここでは触れませんが、今回は通知センターを使って伝えています。
そこまでリアルタイムの動作を必要としてませんし。

急ぎで、Apple WatchとiPhoneとのデータ共有方法について確認されたい方は
AppDelegate.mと、InterfaceController.m(WatchKit Extensionの中)を確認いただければと。

全体通して見てもそこまで多くの量のコードがあるわけではないので、ご一読いただければと。


ではでは。

0 件のコメント :

コメントを投稿

スポンサードリンク