我观看了WWDC2015并且发现现在可以在手表上开发本地应用。这开启了很多能力,我想知道如何在我的iOS应用和AppleWatch应用之间发送数据。
我看到有一个叫做WatchConnectivity的新框架。我该如何使用它,并且在来回发送数据时我有哪些选择?
我观看了WWDC2015并且发现现在可以在手表上开发本地应用。这开启了很多能力,我想知道如何在我的iOS应用和AppleWatch应用之间发送数据。
我看到有一个叫做WatchConnectivity的新框架。我该如何使用它,并且在来回发送数据时我有哪些选择?
WatchConnectivity
iOS和watchOS之间需要相互通信,首先这两个类需要遵循<WCSessionDelegate>
并且引用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时对应的设备可达。
在将数据传输到您的应用程序之间,您有几个选项,在苹果文档中描述如下:
使用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会议视频和阅读Apple WatchConnectivity文档