【问题标题】:Is it possible to make an iOS app process WatchKit connectivity requests while closed?是否可以在关闭时让 iOS 应用程序处理 WatchKit 连接请求?
【发布时间】:2016-03-23 08:11:15
【问题描述】:

我一直在阅读有关 WatchKit 连接框架的文档,试图弄清楚我是否可以将所有密集处理需求委托给我的父 iOS 应用程序。所有代码都已经存在于父应用程序中,用于执行所需的处理,这样做似乎效率更高,而不是 Apple Watch 应用程序复制代码并自行尝试。

我的问题是,如果 iOS 设备上的应用在手表套件应用发出请求时未处于活动状态,这是否可能?它会只是排队请求直到它下一次打开,还是可以配置为立即处理它?我希望手表总是能得到某种形式的响应或请求超时。

更新:

我发现我的特定问题与在执行单独的请求后从后台线程调用回复处理程序有关。当我这样做时,我没有得到 iOS 设备对 Apple Watch 的回复。这最初让我认为 iOS 设备在激活之前会忽略这些请求。

我的解决方案是执行以下操作,以便始终从主线程调用回复处理程序。这似乎是我必须在文档中遗漏的沟通的关键部分(或者它可能遗漏了:o)。长话短说,在进行如下所示的更新后,我每次都成功地得到了回复。

dispatch_async(dispatch_get_main_queue(), { () -> Void in
    replyHandler(myResponse) // Always call from main thread!
})

【问题讨论】:

  • 是的,sendMessage 可以。 “在 WatchKit 扩展程序处于活动和运行状态时调用此方法会在后台唤醒相应的 iOS 应用程序并使其可访问。” 如果您需要具体帮助,您应该发布minimal reproducible example附上问题的描述。

标签: ios swift watchkit wcsession


【解决方案1】:

只要reachable 为真,WCSession 的sendMessage API 就可以让WatchKit 扩展在后台唤醒iOS 应用程序。这是一个很好的step-by-step tutorial 使用 sendMessage。

【讨论】:

  • 感谢您的确认。我意识到我面临的问题与 iOS 设备在后台线程上调用回复处理程序有关(在后台执行单独的请求之后)。我更新了回复处理程序,使其始终在主线程上调用,这似乎已经解决了问题。
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多