美文网首页
WatchConnectivity相互通信

WatchConnectivity相互通信

作者: Apple技术产品粉 | 来源:发表于2017-10-08 11:47 被阅读0次

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

    如何双向通信

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

    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相互通信

          本文链接:https://www.haomeiwen.com/subject/tgseyxtx.html