WCSession sendMessage何时无法在后台唤醒iOS应用程序?
我正在使用WCSession对象,通过WCSession sendMessage何时无法在后台唤醒iOS应用程序?,ios,iphone,watchkit,watchos-3,wcsession,Ios,Iphone,Watchkit,Watchos 3,Wcsession,我正在使用WCSession对象,通过sendMessage(uu2;:replyHandler:errorHandler:)将数据从手表应用程序(watchOS 3.3 beta 4)发送回相应的iOS应用程序。根据报告: 在WatchKit扩展处于活动状态时从其调用此方法 运行会在后台唤醒相应的iOS应用程序 使它可以到达 但是,我发现,如果在调用sendMessage之前WCSession对象的isReachable属性为false,则消息无法发送,并出现以下错误: Error Domai
sendMessage(uu2;:replyHandler:errorHandler:)
将数据从手表应用程序(watchOS 3.3 beta 4)发送回相应的iOS应用程序。根据报告:
在WatchKit扩展处于活动状态时从其调用此方法
运行会在后台唤醒相应的iOS应用程序
使它可以到达
但是,我发现,如果在调用sendMessage
之前WCSession
对象的isReachable
属性为false
,则消息无法发送,并出现以下错误:
Error Domain=WCErrorDomain code=7007“无法访问配对设备上的WatchConnectivity会话。”UserInfo={NSLocalizedDescription=WatchConnectivity会话无法访问配对设备。}
会话被激活了,所以我相信这个sendMessage
调用应该是让iOS应用程序可以访问,然后被发送,但这并没有发生
在什么情况下会发生这种情况,有什么解决办法吗?a)如果您使用的是sendMessage(u,replyHandler:u,errorHandler:u)
和非nil回复处理程序,ios对应方的WCSessionLegate应该有会话(u会话:WCSession,didReceiveMessage:[String:any],replyHandler:@escaping)([String:Any]->Void)
方法已实现,一旦在此方法内调用replyHandler(:)
,消息将被称为已传递。如果未实现此方法,消息将不会得到响应,您将得到超时错误
b) 另外,我注意到,在任何
会话(session:WCSession,didXXX:XXX)中编写代码时,都不会传递消息
正在执行WCSessionDelegate的方法。看起来所有这些方法都在一个串行后台队列中执行。您如何测试?这是否在设备上,以及手机和手表当前是否与蓝牙连接?是的,这是在与手机有蓝牙连接的设备上。它通常使手机可以访问,但失败<10%的时间。