美文网首页
让人闹心的WatchConnectivity

让人闹心的WatchConnectivity

作者: 爱技术的田同学 | 来源:发表于2021-06-19 11:23 被阅读0次

最近开发一款手表项目,需要手机手表通信。选择WatchConnectivity来实现功能。以前也没研究过,于是先来个demo学习一下。

最先让本同学上火(可能还没到闹心的地步)的,是使用模拟器运行代码,发现手机手表就不能通讯。手机发的消息,手表看不到,手表发的,手机也收不着。这就比较烦了,于是baidu、biying、google一串下来发现必须用真机调试。真机运行下,果然可以。

Demo可以了,结合自己的业务搞起,自定义了数据对象,传输自定义对象列表balabala……然后悲剧了。wcSession.sendMessage中message类型是[String :Any],不能传递自定义类型数据。

所以只能将查询的自定义对象列表转换成对应的数据格式进行发送。至此,勉强的把数据组装起来,传递到手表端,手表端也不负众望的能接收数据并且显示出来。可刚要绽放的笑容瞬间又消失啦啦啦,那个啥……字典是无序的,显示的内容每次都变着法的气人,原本可能有点上火,现在就是闹心啦。大神们别喷,毕竟学习语法时记得,实践的时候那么不巧的忘了。然后,换了种写法,愉快的搞定了。晚饭加了个鸡腿(裂开腮帮子那叫一个痛快,哈哈)

调试没啥问题愉快的封板。然后ios有版本更新,watch也有更新提示,更吧。没想到闹心的来了。“WCSession WCErrorCodeNotReachable”,去论坛一顿查阅,也没见个解决的,郁闷ing,想着是不是自己写的代码太差,这里是不是替换成单例,那里是不是要单独封装……各种改代码,然后过了好久郁闷了好久,又有版本更新啦,更完了,问题没了,用最初封板的代码,一点都没改过的版本,运行良好。

以为这样就结束了,那就too young了,哪里听说过ios不更新啦!!!后面又有各种更新,同学的代码也是今天可以运行,下个更新版本可能就不行,所以我决定彻底解决一下这个问题。顺便插一句,昨天打了第二针新冠疫苗,那叫一个困呀,就困成狗的情况下我还想是哪里的问题。我又搞了个demo,不加业务,纯测试。

1、尝试从手表给手机发message,不需要应答数据的那种,每次都成功。

代码如下:

//watch

let message = ["message":"hello phone"]

        wcSession.sendMessage(message, replyHandler:nil) { errorin

            print(error.localizedDescription)

        }

//phone

funcsession(_session:WCSession, didReceiveMessage message: [String:Any]) {

       print("message:\(message)")

    }

2、尝试手表给手机发message,需要应答数据的那种,每次都失败。

代码如下:

//watch

letmessage = ["query":true]

        wcSession.sendMessage(message) { replyin

            letdata = reply["data"]as!String

            print("watch reply data:\(data)")

            DispatchQueue.main.async{ [self]in

                self.showMessageLabel.setText(data)

            }

        } errorHandler: { errorin

            print(error.localizedDescription)

        }

//phone

funcsession(_session:WCSession, didReceiveMessage message: [String:Any], replyHandler:@escaping([String:Any]) ->Void) {

        varreply = [String:Any]()

        reply["data"] = ["hi watch, nice to see you."]

        print("reply:\(reply)")

        replyHandler(reply)

    }

既然不带应答的每次都成功,我就用这种方式发起请求,然后让手机收到消息后send message给手表是不是也行,然后……意料之中的失败了。后来又尝试了网友们说的updateApplicationContext,一样的失败。但是我发现手表给手机发消息,总是成功的,而手机给手表发总是失败的,代码中我也判断了session的activationState总是activated的,session的isReachable一直是true的。

能想到的都尝试了,于是我去论坛发表了问题。

但是也没人给回复ing

最后看见了这篇文章,感觉那叫一个亲切

下面有很多跟我遇到一样问题的人在跟进,但是也都没解决。看到最后,我似乎也释怀了,应该跟实现代码没太大关系,可能是苹果更新中,对WatchConnectivity修改了什么,这也只是我的猜测。

最后真心的要吐槽一下,app都要上架了,然后就这一更新用户就用不了,闹心……

相关文章

  • 让人闹心的WatchConnectivity

    最近开发一款手表项目,需要手机手表通信。选择WatchConnectivity来实现功能。以前也没研究过,于是先来...

  • 故障让人闹心

    手机出了故障,一直频繁死机,还好是回家才发生的事情。要是在隔离期间,可真就是雪上加霜了,手机是唯一可以与外界取得联...

  • 让人闹心的邻居

    “嘣…嘣…嘣…”今个月不知是第几次从邻居家里传出来了。 邻居住的是一对中年夫妻,听说男人是在跑“摩的”的,女的,就...

  • 让人闹心的APP

    连续好几天了,老感觉自己心烦气躁,沉不住气,稳不下心来,今天尤其明显,到底是什么原因呢?思来想去竟是一个APP惹的...

  • 让人闹心的孩子

    下班后吃过午饭已经是午后两点有余。想到正月里父母家我只去过一次,心里不免有点惭愧。就几公里而已,又不是万儿八千里。...

  • 让人闹心的“斗到”

    一接通电话问:“你还要多大会儿?”“我斗到”。中国的文字含义真是博大精深啊!这个斗到是斗多长时间,还真没有一个确切...

  • iWatch issue集

    问题一、WatchConnectivity Error Domain=WCErrorDomain Code=701...

  • 齐帆齐微课(40)今你闹心了吗

    今天你闹心了吗?面对闹心你能不能立刻冷静下来?闹心时可有人送上温暖的手让你牵,可有微微的笑容融化你冰冷的尘封? 人...

  • WatchConnectivity:学习 WCSession

    作者:Natasha The Robot,原文链接,原文日期:2015-09-21译者:小袋子;校对:numbbb...

  • 想更文,没写完

    闹心啊闹心,想让矛盾到顶端,想让他们和好吧。 时间等等我啊!

网友评论

      本文标题:让人闹心的WatchConnectivity

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