当watchOS应用程序使用HKWorkoutSession在后台运行时如何使WCSession可访问
Posted
技术标签:
【中文标题】当watchOS应用程序使用HKWorkoutSession在后台运行时如何使WCSession可访问【英文标题】:How to make WCSession reachable when the watchOS app is running in background with HKWorkoutSession 【发布时间】:2021-03-12 14:38:43 【问题描述】:我的 watchOS 应用使用锻炼 API 以便在应用进入后台时保持运行。问题是当应用程序处于后台时,WCSession
变得无法访问。但是,我能够运行我的代码,并且在某些情况下,它需要向 iPhone 对应应用程序发送消息。
应用程序的细节要求用户不必与其交互 - 如果超时,手表应用程序应自动将消息发送到手机。
这有可能实现吗?谢谢。
【问题讨论】:
【参考方案1】:我相信handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
方法是您正在寻找的。 Documentation Link
没有看到您的代码,我无法确定您当前的进度是什么,但我已使用此方法在用户位置更改时在后台更新 watchOS 并发症。
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
for task in backgroundTasks
if WKExtension.shared().applicationState == .background
// Do your background work here.
if let watchComplication = task as? WKWatchConnectivityRefreshBackgroundTask
pendingConnectivityTasks.append(watchComplication)
task.setTaskCompletedWithSnapshot(true)
completePendingConnectivityTasksIfNeeded()
附带说明一下,如果您的应用不是真正的锻炼应用,它会在应用审核期间因使用 HealthKit 锻炼会话而被拒绝。
【讨论】:
这些消息需要在后台非常频繁地发送。您是否建议我每次发送此类消息之前都需要启动一个后台任务? 后台执行时间是可控的,可以被 watchOS 限制或终止。如果您有很多数据要发送,我会尝试将数据批处理为某种数组或集合类型。然后在后台会话期间发送这些集合。此页面的中途是讨论此背景预算的地方。 developer.apple.com/documentation/watchkit/background_execution/… 那么它就不会削减它。我需要该应用程序能够在后台无限期运行时随时与手机对应方通信。以上是关于当watchOS应用程序使用HKWorkoutSession在后台运行时如何使WCSession可访问的主要内容,如果未能解决你的问题,请参考以下文章