繁体   English   中英

WCSession sendMessage何时无法在后台唤醒iOS应用?

[英]When does WCSession sendMessage fail to wake iOS app in background?

我正在使用WCSession对象通过sendMessage(_:replyHandler:errorHandler:)将数据从监视应用程序(watchOS 3.3 beta 4)发送回相应的iOS应用程序。 根据Apple提供的文档

在WatchKit扩展程序处于活动状态且正在运行时从其调用此方法,它将在后台唤醒相应的iOS应用程序并使它可访问。

但是,我发现如果在调用sendMessage之前WCSession对象的isReachable属性为false ,则消息将无法发送,并出现以下错误: Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable." UserInfo={NSLocalizedDescription=WatchConnectivity session on paired device is not reachable.} 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应用程序可达,然后发送该应用程序,但这没有发生。

在什么情况下会发生这种情况?有没有解决方法?

a)如果将sendMessage(_, replyHandler:_, errorHandler:_)与非nil应答处理程序配合使用,则ios对方的WCSessionDelegate应该具有session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)方法已实现,一旦您在此方法中调用replyHandler(_:) ,消息将被视为已传递。 如果未实现此方法,则消息将不会获得响应,并且您将收到超时错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM