Apple Watch与iPhone数据通信———— Watch Connectivity
2016-02-23 09:41
441 查看
Apple Watch与iPhone数据通信———— Watch Connectivity
Watch Connectivity原理,iOS App与安装在Watch上的Watch Extension(Watch OS 2.0之后Extension不再放到iPhone中,Watch App可以独立进行数据处理)通过WCSession进行数据传输。
第一步初始化WCSession
在通信之前要确保Watch和iOS上的App都初始化了WCSession,接收方控制器要设置delegate—>WCSessionDelegate,同时要激活WCSession,代码如下:
第二步校验Counterpart
可以传输的数据格式为字典(NSDictionary)、NSData、文件(NSURL), iOS端在发送信息之前应先检验1.Apple Watch是否与手机相连、2.Apple Watch是否安装了该应用。 Watch端在发送前无需检验是否安装了应用。 检验代码如下:
watchapp安装成功就会在手表上建立相应app的目录,因此session.watchAppInstalled==false效果等同于watchDirectoryURL != nil。
watchDirectoryURL一般只在需要额外的初始化处理的情况下,比如app重装恢复队列内容、设定初始设置时等情况下会用到。
第三步发送消息
发送方法分为三种:
一.ApplicationContext
只能发送NSDictionary,在对应App被唤醒时系统会将消息发送过去。
接收方App对应的代理方法:
二.Transfer
分为UserinfoTransfer和FileTransfer,能发送NSDictionary和File
接收方App对应的代理方法:
通过后台传输NSDictionary或者File,发送的数据将以队列的形式传递给目标App,即使当前App暂停或终止传输仍然继续。
三.replyHandle
可以发送NSDictionary或NSData, 发送方可以获得接收方响应。
实时通讯,传输时要求App必须处于运行时,若iOS App未启动,Watch Extension将会在iOS后台启动App。当iOS为发送方,Watch App未启动时,发送失败。
接收方对应的代理方法:
Watch Connectivity原理,iOS App与安装在Watch上的Watch Extension(Watch OS 2.0之后Extension不再放到iPhone中,Watch App可以独立进行数据处理)通过WCSession进行数据传输。
第一步初始化WCSession
在通信之前要确保Watch和iOS上的App都初始化了WCSession,接收方控制器要设置delegate—>WCSessionDelegate,同时要激活WCSession,代码如下:
if ([WCSession isSupported]) { WCSession* session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; }
第二步校验Counterpart
可以传输的数据格式为字典(NSDictionary)、NSData、文件(NSURL), iOS端在发送信息之前应先检验1.Apple Watch是否与手机相连、2.Apple Watch是否安装了该应用。 Watch端在发送前无需检验是否安装了应用。 检验代码如下:
/** Check if iOS device is paired to a watch */ BOOL session.paired /** Check if the user has the Watch app installed */ BOOL session.watchAppInstalled
watchapp安装成功就会在手表上建立相应app的目录,因此session.watchAppInstalled==false效果等同于watchDirectoryURL != nil。
watchDirectoryURL一般只在需要额外的初始化处理的情况下,比如app重装恢复队列内容、设定初始设置时等情况下会用到。
第三步发送消息
发送方法分为三种:
一.ApplicationContext
- (BOOL)updateApplicationContext:(NSDictionary<NSString *,id> *)applicationContext error:(NSError * _Nullable *)error
只能发送NSDictionary,在对应App被唤醒时系统会将消息发送过去。
接收方App对应的代理方法:
- (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *,id> *)applicationContext (此处官方文档描述有误)
二.Transfer
分为UserinfoTransfer和FileTransfer,能发送NSDictionary和File
- (WCSessionFileTransfer *)transferFile:(NSURL *)file metadata:(NSDictionary<NSString *, id> *)metadata - (WCSessionFileTransfer *)transferFile:(NSURL *)file metadata:(NSDictionary<NSString *, id> *)metadata
接收方App对应的代理方法:
- (void)session:(WCSession *)session didReceiveUserInfo: (NSDictionary<NSString *, id> *)userInfo; - (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file;
通过后台传输NSDictionary或者File,发送的数据将以队列的形式传递给目标App,即使当前App暂停或终止传输仍然继续。
三.replyHandle
可以发送NSDictionary或NSData, 发送方可以获得接收方响应。
- (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(void (^)(NSError *error))errorHandler - (void)sendMessageData:(NSData *)data replyHandler:(void (^)(NSData *replyMessageData))replyHandler errorHandler:(void (^)(NSError *error))errorHandler
实时通讯,传输时要求App必须处于运行时,若iOS App未启动,Watch Extension将会在iOS后台启动App。当iOS为发送方,Watch App未启动时,发送失败。
接收方对应的代理方法:
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message - (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> *_Nonnull))replyHandler - (void)session:(WCSession *)session didReceiveMessageData:(NSData *)messageData - (void)session:(WCSession *)session didReceiveMessageData:(NSData *)messageData replyHandler:(void(^)(NSData *replyMessageData))replyHandler
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- asp.net中Response.Redirect与Server.Transfer的区别分析
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码
- 微信支付终于成功了(安卓、iOS)在此分享