web-dev-qa-db-ja.com

watchOS2のWatchConnectivityを使用してiOSとWatchOSの間でメッセージを送信する

WWDC2015を見て、今すぐ時計でネイティブアプリを開発できることを確認しました。これにより多くの機能が開かれ、iOSアプリとAppleWatchアプリの間でデータを送信するにはどうすればよいのでしょうか。

WatchConnectivityと呼ばれる新しいフレームワークがあることを知りました。これをどのように使用できますか?データを送受信するときのオプションは何ですか?

13
Philip

WatchConnectivity

まず、相互に通信することになっている2つのクラス(iOSとwatchOS)は、<WCSessionDelegate>#importWatchConnectivityフレームワークに準拠する必要があります。

データを送信する前に、デバイスがデータを送信できるかどうかを確認する必要があります

if ([WCSession isSupported]) {
      WCSession *session = [WCSession defaultSession];
      session.delegate = self;
      [session activateSession];
      NSLog(@"WCSession is supported");
}

次に、「インタラクティブメッセージング」(sendMessage API)を使用する場合は、最初に他のデバイスに到達できるかどうかを確認する必要があります。

if ([[WCSession defaultSession] isReachable]) {
    //Here is where you will send you data
}

「バックグラウンド操作」APIでは、WCSessionAPIを呼び出した時点で対応するデバイスに到達可能である必要はありません。

アプリ間でデータを転送する場合、いくつかのオプションがあります。 Apple Documentation これらは次のように説明されています。

  • updateApplicationContext:error:メソッドを使用して、最新の状態情報のみを相手に伝達します。カウンターパートがウェイクアップすると、この情報を使用して自身の状態を更新し、同期を維持できます。この方法で新しい辞書を送信すると、以前の辞書が上書きされます。

  • sendMessage:replyHandler:errorHandler:またはsendMessageData:replyHandler:errorHandler:メソッドを使用して、データを相手にすぐに転送します。これらのメソッドは、iOSアプリとWatchKit拡張機能の両方がアクティブな場合の即時通信を目的としています。

  • transferUserInfo:メソッドを使用して、バックグラウンドでデータのディクショナリを転送します。送信した辞書は、相手に配信するためにキューに入れられ、現在のアプリが一時停止または終了しても転送が続行されます。

  • transferFile:metadata:メソッドを使用して、バックグラウンドでファイルを転送します。単純な値のディクショナリ以上のものを送信する場合は、この方法を使用します。たとえば、このメソッドを使用して、画像またはファイルベースのドキュメントを送信します。

アプリケーションコンテキストを使用してデータを送受信する方法の例を示します

データを送る:

WCSession *session = [WCSession defaultSession];
NSError *error;

[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error];

データの受信:

- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {

    NSLog(@"%@", applicationContext);


    NSString *item1 = [applicationContext objectForKey:@"firstItem"];
    int item2 = [[applicationContext objectForKey:@"secondItem"] intValue];
}

WatchConnectivityの詳細については、 WWDC2015セッションビデオ を見て、 WatchConnectivityに関するAppleドキュメント を読むことをお勧めします。

26
Philip