iOS 和 iWatch之间的通讯方式

一、前言

我们知道数据交换在iOS8中就有,可在IOS10.3发布后,appstore就开始拒绝接受还支持watchos 1的发布申请了,只接受 watchos 2.0及更高版本,那样 怎样处理在iOS-app和iWatch-app之间的数据通讯呢?苹果总共更新了两种方式,一种是 在 IOS10.3之前 都可以使用 ,另一种就是IOS9 之后,watchOS 2.0以后使用的方式

iOS 和 iWatch之间的通讯方式_第1张图片

二、第一种 iWatch 发起 openParentApplication iOS 响应handleWatchKitExtensionRequest

1.通讯的分类

这种方式较为古老,有致命的缺陷,数据交互 只能 从iWatch 往 iOS中发送数据,而不能从 iOS主动向iWatch 发送数据,不能发送互动消息

iOS 和 iWatch之间的通讯方式_第2张图片

三、第二种 通过WatchConnectivity.framework 来进行数据交换

1.通讯的分类

WatchConnectivity框架的通信方式有两种模式,一种是后台传输,另一种是交互式消息。

iOS 和 iWatch之间的通讯方式_第3张图片


四、WatchConnectivity.framework 使用详细介绍

The Watch Connectivity framework (WatchConnectivity.framework) provides a two-way communications conduit between an iOS app and a WatchKit extension on a paired Apple Watch. Apps use this framework to pass files and data back and forth. Most transfers happen in the background when the receiving app is inactive. When the app wakes up, it is notified of any data that arrived while it was inactive. Live communication is also possible when both apps are active.

1.WCSession

  The WCSession class facilitates communication between a WatchKit extension and its companion iOS app. Both processes must create and configure an instance of this class at some point during their execution. When both session objects are active, the two processes can communicate immediately by sending messages back and forth. When only one session is active, the active session may still send updates and transfer files, but those transfers happen opportunistically in the background.

if ([WCSession isSupported]) {//Session是永远支持WatchOS的,因此我们是为了检查iOS设置是否支持Session。
   WCSession* session = [WCSession defaultSession];//获取一个默认Session实例
   session.delegate = self;//设置Session的代理
   [session activateSession];//设置Session为活跃状态
}

2.WCSession的状态

[[WCSession defaultSession] isPaired]; //  是否已与设备配对
[[WCSession defaultSession] isWatchAppInstalled] ; //  watchApp是否已安装
[[WCSession defaultSession] isComplicationEnabled]; //complication 是否可用

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

3.1后台传输

后台传输模式是最常用的通信模式,面向内容与用户交互,主要用于传输非即时的内容,体现在内容可由操作系统智能传输(操作系统允许发送方可退出,选择传输时机,支持接收者下次启动时发送),并将内容以队列方式发送。
      类型:
  应用上下文内容传输(Application Context)
  用户数据传输(UserInfo)
  文件传输 (File)
 这里以传输 userInfo为例
if ([WCSession isSupported]) {//Session是永远支持WatchOS的,因此我们是为了检查iOS设置是否支持Session。
   WCSession* session = [WCSession defaultSession];//获取一个默认Session实例
   session.delegate = self;//设置Session的代理
   [session activateSession];//设置Session为活跃状态
}
 [[WCSession defaultSession] sendMessage:@{@"watch":@"i come from watch"} replyHandler:^(NSDictionary * _Nonnull replyMessage) {
        
    } errorHandler:^(NSError * _Nonnull error) {
        
    }];
在ios 中设置 代理
if ([WCSession isSupported]) {//Session是永远支持WatchOS的,因此我们是为了检查iOS设置是否支持Session。
   WCSession* session = [WCSession defaultSession];//获取一个默认Session实例
   session.delegate = self;//设置Session的代理
   [session activateSession];//设置Session为活跃状态
}
-(void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary *)userInfo
{
    //在这里就可以接收到 watch发的交互式消息了@{@"watch":@"i come from watch"}
}

五、Demo WatchConnectivity下载地址

下载:https://github.com/puyangdev/PYWatch


你可能感兴趣的:(appleWatch)