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

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

我看到有一个名为WatchConnectivity的新框架。 我怎样才能使用这个function,来回发送数据时有什么select?

WatchConnectivity

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

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

 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不需要在调用WCSession API的时候可以访问对应设备。

在Apple应用程序之间传输数据时,有几种select,它们是这样描述的:

  • 使用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的更多信息,我build议您观看WWDC2015会话video并阅读WatchConnectivity上的Apple文档