Apple Watch的通信机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apple Watch的通信机制相关的知识,希望对你有一定的参考价值。

通讯机制

(1)用户需要开启蓝牙连接Watch后在APP中进行设置,调整手表与iPhone的交互关系,蓝牙距离9米,超过距离,断开连接

 

(2)iPhone 与AppleWatch处于同一Wi-Fi网络(或者连接到由iPhone建立的Wi-Fi热点),只要信号存在,双方距离多远都可以

 

(3)watch应用对象添加到项目后,包含Watch App 和 WatchKit Extension。Watch App 位于iWatch上,目前只允许包含storyboard 和 Resource文件;Watch Extension 位于用户的iPhone安装的对应App上,这里包括我们需要实现的代码逻辑和其他资源。这两部分通过Watch Kit进行连接通讯,用户点击Watch App后,与Watch匹配的iPhone会启动WatchKit extension,然后和Watch建立连接,产生通信

 

 iPhone和Apple Watch通信的API

(1)使用WKInterfaceController中的openParentApplication:rely:方法在后台唤醒iPhone端 主应用,由主应用去进行网络数据的处理,处理完返回WatchKit扩展所需的数据

//WatchKit Extension 发送请求唤醒主应用

+ (BOOL)openParentApplication:(NSDictionary *)userInfo reply:(void(^)(NSDictionary * replyInfo,NSError * error))reply;

 

(2)主应用处理watchKit请求的方法,UIApplicationDelegate

 

-(void)application:(UIApplication*)application handleWatchKitExtensionRequest:(NSDictionary*)userInfo reply:(void (^)(NSDictionary *))reply;

需要注意的是主应用每次执行UIApplicationDelegate方法,处理完成WatchKit的请求后都要回调reply(replyInfo);否则这个方法会响应失败。

 

iPhone app 和它的Watch app通信

iPhone app可以使用Darwin Notification Center(Core Foundation框架的API) 通知WatchKit Extension 一个特定的事件

【注】一个应用只有唯一一个Darwin Notification Center,所有的Drawin通知都是系统级的,要想通知发出,主线程需要在一个常用的模式下运行,Watch 和iPhone 必须在前台运行才能处理发送和接收Darwin通知,不能通过Darwin通知传送对象,只能携带一个名字和userInfo字典,Darwin通知是非持久性的,是即时传送的,如果放置后台,通知就会丢失

 

使用App Groups 共享数据

使用App Groups 和 NSUserDefaults 在ios应用和WatchKit 扩展之间共享少量数据非常容易,对于其他资源,比如Core Data ,可使用共享容器来简化它们之间的数据访问并且保持最新的数据

 

使用Handoff

Handoff 允许用户简单的在iPhone和Apple Watch 之间切换任务,WKInterfaceController中的Handoff API可被用在Glance和自定义通知界面中,可以传给应用程序的主界面控制器

 

iPhone 和 Watch 双向通信iOS9 (既可以Watch向iPhone发送数据,也可以让iPhone主动向Watch发送数据)

Watch Connectivity

1、官方文档的代码

第一行  session是永远支持WatchOS的,这句是为了检查iOS设置是否支持session

第二行 获取一个默认session实例

第三行 设置session的代理

第四行 设置session为活跃状态

 

2.WCSession的状态

paired  是否与设备配对

WatchAppInstalled WatchApp是否已安装

complication 是否可用

 

3.通讯的分类-WatchConnectivity框架的通信方式有两种模式,一种是后台传输,另一种是交互式消息

 

后台传输是最常用的通信模式,面向内容与用户交互,主要用于传输非即时的内容,体现在内容可由操作系统智能传输(操作系统允许发送方可退出,选择传输机制,支持接收者下次启动时发送,并将内容以队列的方式发送)

类型:应用上下文内容传输,用户数据传输,文件传输

实现步骤:

获取默认的WCSession并开启

实现WCSessionDelegate接收回调方法

发送消息并处理响应消息

接收端处理接收和响应(可选)

 

WatchConnectivity在iOS8和iOS9中的区别

iOS8 中Watch与iPhone之间的通信只能通过Watch主动发起请求,iPhone响应这个请求的方式来完成一次通信,不能够iPhone直接连接Watch,向Watch发送数据

iOS9 中是双向操作

 

iOS8 中 发送数据的内容只能为普通的字典数据类型

iOS9 不但能发送简单的字典数据,还可以支持发送一些数据(NSData)及文件类型

以上是关于Apple Watch的通信机制的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?

Apple Watch 和 openParentApplication 在后台

在 Apple Watch 中检查互联网连接

ZK的watch机制

为啥我的 Apple Watch OS 应用只有在 iOS 应用处于活动状态时才能收到来自我的 iOS 应用的消息?

用flannel实现跨主机container通信