使用watchOS2中的WatchConnectivity在iOS和WatchOS之间发送消息

时间:2015-07-16 14:58:28

标签: ios objective-c apple-watch watch-os-2

我观看了WWDC2015并看到您现在可以在手表上开发本机应用程序。这开辟了很多功能,我想知道如何在我的iOS应用程序和AppleWatch应用程序之间发送数据。

我看到有一个名为WatchConnectivity的新框架。如何使用此功能以及在来回发送数据时有哪些选择?

1 个答案:

答案 0 :(得分:26)

<强> WatchConnectivity

首先,两个应该相互通信的类(iOS和watchOS)需要符合<WCSessionDelegate>#import WatchConnectivity框架

在发送数据之前,您需要检查您的设备是否能够发送数据

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

然后,如果您希望使用&#34;交互式消息传递&#34; (sendMessage API)您需要先查看是否可以访问其他设备:

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

&#34;后台操作&#34; API不需要在您调用WCSession API的时间点访问对应设备。

在您的应用之间传输数据时,您有多种选择,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 session video并阅读Apple Documentation on WatchConnectivity

相关问题