新人奮闘記21
iOS入門
今回もiOSとAppleWatchの通信について記述したいとおもいます。
前回の記事では、ファイルの転送についての記事でしたが、今回は、iOS又はWatchOS側から設定情報や、データの転送について
ハマった点を記述したいとおもいます。
そこてシンプルなプロジェクトを作成してみました
iOSで入力されたテキストをボタンタップで、AppleWatchへ送信する
※UI等については割愛させていただきます。
[iOSの送信]
共通の実装として、それぞれ送信側、受信側、でDelegateを実装しますが、
WCSessionDealegateは9.0以降ですが、必須メソッドが3つありそれぞれ、iOS9.3以降をサポートしています。
ターゲットを設定する時、注意が必要だと思いました。
現時点では、WatchConnectivityフレームワークを使って通信を実装する場合は、必ず、iOS9.3以降WatchOS2.2以降で設計する事が必要だという事を学びました。
実際の送信処理が以下です。
updateApplicationContextにて、テキストフィールドに入力された、値を送信しています。
[WatchOSの受信]
コチラも同じように必須のdelegate
activationDidCompleteWithメソッドを実装しますが、iOS側で必須となっているDidBecomeInactiveやDidDeactiveは必須ではありません。
実際の受信処理が以下です。
辞書の形式でデータが受信されるとdidReceiveApplicationContextメソッドが呼ばれるので
その都度AppleWatchにあるLabelへセットしています。
[実行結果]
iOSにテキストフィールドに「hoge」と入力し、送信ボタンをタップするとAppleWatchのラベルに「hoge」が表示されました。
しかし、はまりポイントとして注意しなければいけない事があります。
今回の実行でいうと、「hoge」を送信すれば,「hoge」を受信しましたが、もう一度[hoge」を送信する事を考え、送信ボタンを
タップして、送信してみました。するとAppleWatch側のdidReceiveApplicationContext(データ受信時)メソッドはコールされません
でした。現在は調査中ですが、対策として、受信したデータは、受信毎に別の領域に保存しておく事で、対処が可能であり、
随時、その別の領域からデータを利用すれば解決するかと思います。
まとめ
辞書データのやり取りには、updateApplicationContextを使うが、受信時はdidReceiveApplicationContextに注意を払い、実装する。
このメソッドはバックグラウンドにより転送されるので、リアルタイムにメッセージのやり取りをする場合、sendMessageというメソッドを
使うとより、早く通信できる。
admin at 2016年12月01日 10:00:41