什么时候WCSession sendMessage无法在后台唤醒iOS应用程序?

时间:2017-03-06 17:17:33

标签: ios iphone watchkit watch-os-3 wcsession

我正在使用WCSession对象通过sendMessage(_:replyHandler:errorHandler:)将监视应用程序(watchOS 3.3 beta 4)中的数据发送回相应的iOS应用程序。根据{{​​3}}:

  

在WatchKit扩展名处于活动状态时调用此方法   并运行在后台唤醒相应的iOS应用程序   让它可以到达。

但是,我发现如果在调用isReachable之前WCSession对象的false属性为sendMessage,则该消息无法发送此错误: Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable." UserInfo={NSLocalizedDescription=WatchConnectivity session on paired device is not reachable.}

会话已激活,因此我认为此sendMessage调用应该可以使iOS应用程序可访问,然后发送,但这不会发生。

在什么情况下会发生这种情况,是否有任何解决方法?

1 个答案:

答案 0 :(得分:0)

a)如果你使用sendMessage(_, replyHandler:_, errorHandler:_)非零回复处理程序,ios对应的WCSessionDelegate应该实现session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)方法,并且一旦你&#39就会传递消息; ll在此方法中调用replyHandler(_:)。如果未实现此方法,则消息将不会得到响应,并且您将收到超时错误。

b)另外,我注意到在WCSessionDelegate的任何session(_ session: WCSession, didXXX: XXX)方法中的代码正在执行时,不会传递消息。看起来所有这些都在一个串行后台队列中执行。