WatchOS2 新增通信功能"WCSession"的使用

在watchOS1中,我们使用AppGroup和AppDelegate在手机和手表之前传递数据,
使用方法可以参考我之前写的CSDN

[WatchKit][AppleWatch和iPhone通信][方法1]App Group
[WatchKit][AppleWatch和iPhone通信][方法2]App Delegate

但是这个方法并不是很好用,所以WatchOS 2 提供了Watch Connectivity Framework来进行 经过配对的Watch和iPhone的数据交换,该框架可以后台传输和前台传输。
而WatchConnectivity Framework提供了一个WCSession对象,我们要通过WCSession可以进行消息传输。

本文GitHub是fork自randomize的代码AppleWatchTutorialSeries
其中Tutorial8就是咱们今天的内容,其它教程也可以顺便学习一下

启动服务

使用WCSession发送和接受消息前,需要先在手机和手表的Controller中分别启动Session,并且尽可能的早:

    WCSession* session = [WCSession defaultSession];
    session.delegate = self;
    [session activateSession];

发送消息

WCSession* session = [WCSession defaultSession];
[session sendMessage:@{@"b":@"goodBye"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
        
    } errorHandler:^(NSError * _Nonnull error) {
        
    }];

这里需要注意,即使replyHandler和errorHandler不使用,也不可以设置为nil,否则会造成发送消息不会被接收到,一开始randomize的Objc代码就有这个问题,所以我提交了一次修改,修正了这个问题

[session sendMessage:@{@"b":@"goodBye"} replyHandler:nil errorHandler:nil];//禁止这样调用

接受消息

接受消息使用代理的方式,所以我们首先要在手机和手表的Controller中,遵守如下Delegate

WCSessionDelegate

然后,创建如下方法,接受消息:

- (void) session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler{
    //message即是对方发送的内容
}

需要注意的是,在手机侧,这个代码似乎不是在主线程被调用,所以如果在方法中更新UI控件,比如修改UILabel的内容,需要使用GCD在主线程中修改:

- (void) session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler{
    dispatch_async(dispatch_get_main_queue(), ^{
        self.messageLabel.text = message[@"b"];
        NSLog(@"%@",message);
    });
    
}

结语

这个通讯方法很简单,使用起来更佳好用,如果涉及多页面通讯,我们可以使用单例来集中管理信息传递,
但是值得注意的是,这个方法的传送速度也不快,这主要是受手表硬件限制,毕竟蓝牙速度不快,还要考虑电池续航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着今天凌晨 Apple 发布了第一版的 Watch Kit 的API,对于开发者来说,这款新设备的一些更详细的信...
    走在路上的小二阅读 4,298评论 0 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,409评论 4 61
  • 在一个小区入口,长长的甬道望过去。两个黄色的方柱子连着墙。左边一棵大树,好像是泡桐,可以肆无忌惮享受阳光的伸展到路...
    枝楼阅读 1,855评论 0 2
  • 关于宫崎骏的作品,处处都能看出这位动漫巨匠的童趣。处处洒下的那点温暖,让人冷漠的心带有一丝温暖。 个人认为,宫...
    雕塑家阅读 2,720评论 0 3
  • 你是世界上最美的女人 有撩人的身姿 迷离的眼神 你的前世定是只狐狸 我该如何赞美你 把你比作花么 可你比花更娇艳 ...
    赖白白阅读 1,616评论 4 3

友情链接更多精彩内容