新人奮闘記21

iOS入門

今回もiOSとAppleWatchの通信について記述したいとおもいます。

前回の記事では、ファイルの転送についての記事でしたが、今回は、iOS又はWatchOS側から設定情報や、データの転送について

ハマった点を記述したいとおもいます。

そこてシンプルなプロジェクトを作成してみました

iOSで入力されたテキストをボタンタップで、AppleWatchへ送信する

※UI等については割愛させていただきます。

 

[iOSの送信]

共通の実装として、それぞれ送信側、受信側、でDelegateを実装しますが、

WCSessionDealegateは9.0以降ですが、必須メソッドが3つありそれぞれ、iOS9.3以降をサポートしています。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-30-17-00-49

ターゲットを設定する時、注意が必要だと思いました。

現時点では、WatchConnectivityフレームワークを使って通信を実装する場合は、必ず、iOS9.3以降WatchOS2.2以降で設計する事が必要だという事を学びました。

実際の送信処理が以下です。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-30-17-20-31

updateApplicationContextにて、テキストフィールドに入力された、値を送信しています。

[WatchOSの受信]

コチラも同じように必須のdelegate

activationDidCompleteWithメソッドを実装しますが、iOS側で必須となっているDidBecomeInactiveやDidDeactiveは必須ではありません。

実際の受信処理が以下です。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-30-18-01-35

辞書の形式でデータが受信されるとdidReceiveApplicationContextメソッドが呼ばれるので

その都度AppleWatchにあるLabelへセットしています。

 

[実行結果]

iOSにテキストフィールドに「hoge」と入力し、送信ボタンをタップするとAppleWatchのラベルに「hoge」が表示されました。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-30-18-13-48-1

 

 

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-30-18-14-05

しかし、はまりポイントとして注意しなければいけない事があります。

今回の実行でいうと、「hoge」を送信すれば,「hoge」を受信しましたが、もう一度[hoge」を送信する事を考え、送信ボタンを

タップして、送信してみました。するとAppleWatch側のdidReceiveApplicationContext(データ受信時)メソッドはコールされません

でした。現在は調査中ですが、対策として、受信したデータは、受信毎に別の領域に保存しておく事で、対処が可能であり、

随時、その別の領域からデータを利用すれば解決するかと思います。

まとめ

辞書データのやり取りには、updateApplicationContextを使うが、受信時はdidReceiveApplicationContextに注意を払い、実装する。

このメソッドはバックグラウンドにより転送されるので、リアルタイムにメッセージのやり取りをする場合、sendMessageというメソッドを

使うとより、早く通信できる。

 



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム