【问题标题】:When does WCSession sendMessage fail to wake iOS app in background?WCSession sendMessage 何时无法在后台唤醒 iOS 应用程序?
【发布时间】:2017-03-06 17:17:33
【问题描述】:

我正在使用 WCSession 对象通过sendMessage(_:replyHandler:errorHandler:) 将数据从手表应用程序(watchOS 3.3 beta 4)发送回相应的 iOS 应用程序。根据documentation from Apple

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

但是,我发现如果WCSession 对象的isReachable 属性在调用false 之前是false,则消息无法发送,并出现以下错误: 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 应用程序可以访问然后被发送,但这并没有发生。

在什么情况下会出现这种情况,有什么解决办法吗?

【问题讨论】:

  • 你是如何测试的?这是在设备上吗?手机和手表当前是否通过蓝牙连接?
  • 是的,这是在与手机有蓝牙连接的设备上。它通常使电话可达,但失败率

标签: ios iphone watchkit watchos-3 wcsession


【解决方案1】:

a) 如果您将sendMessage(_, replyHandler:_, errorHandler:_) 与非零回复处理程序一起使用,则 ios 对应方的 WCSessionDelegate 应该实现 session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) 方法,并且一旦您在此方法中调用 replyHandler(_:),消息将被称为已传递。如果不执行此方法,消息将不会得到响应,并且会出现超时错误。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多