WatchConnectivity相互通信

在iOS 9.0+和watchOS 2.0+的时候,WatchConnectivity是可以进行手机和手表之间的双向通信的。而在之前,只能有手表主动发起连接,而手机端是无法向手表端发送回执的。

如何双向通信

看一个例子,在这个例子中,手表端点击发送按钮向手机端发送一条消息,消息通过本地通知的方式展现出来。然后,手机向手表发送一个回执。

WatchConnectivity相互通信_第1张图片
Watch端
iPhone端

首先需要在手机端和手表端都初始化一个WCSession对象

if([WCSession isSupported])

{

      WCSession *session=[WCSession defaultSession];

      session.delegate=self;

      [session activateSession];

}

前提是先导入WatchConnectivity/WatchConnectivity.h文件并且引用WCSessionDelegate

然后分别在手表端和手机端分别实现代理方法sendMessage:ReplyHandler:方法和didReceiveMessage:ReplyHandler:,其中ReplyHandler方法就是接收完成后发送的回执。

手表端:

if([WCSession defaultSession].isReachable)   

 {        

         NSDictionary *msg=@{@"msg":@"你好iPhone,我是Apple Watch"};       

         [[WCSession defaultSession]sendMessage:msg replyHandler:^(NSDictionary* _Nonnull replyMessage) {

         NSString *reply=replyMessage[@"msg"];

         [self.ResultLabel setText:reply];

         } errorHandler:^(NSError * _Nonnull error) {

         }]; 

}

手机端:

-(void)session:(WCSession *)session didReceiveMessage:(NSDictionary*)message replyHandler:(nonnull void (^)(NSDictionary* _Nonnull))replyHandler

{

   NSString *msg=[NSString stringWithFormat:@"%@",message[@"msg"]];

   UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];

   //需创建一个包含待通知内容的 UNMutableNotificationContent 对象,注意不是    UNNotificationContent ,此对象为不可变对象。

   UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];

   content.title = [NSString localizedUserNotificationStringForKey:@"Hello!" arguments:nil];  

   content.body = [NSString localizedUserNotificationStringForKey:msg

   arguments:nil];

    content.sound = [UNNotificationSound defaultSound];

    // 在 alertTime 后推送本地推送

    UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger

triggerWithTimeInterval:1 repeats:NO];

    UNNotificationRequest* request = [UNNotificationRequest     requestWithIdentifier:@"FiveSecond"

content:content trigger:trigger];

//添加推送成功后的处理!

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {

    NSDictionary *replyMSG=@{@"msg":[NSString stringWithFormat:@"你好watch,我是       iPhone,你的消息已收到 %@",[NSDate date].description]};

    replyHandler(replyMSG);

    }];

}

这样最简单的相互通信就完成了。

你可能感兴趣的:(WatchConnectivity相互通信)