iOS Live Activity后台更新失效求助:Workout应用按钮状态无法持久更新
iOS Live Activity后台长时间更新失效问题求解
问题场景
我正在为健身追踪App实现iOS Live Activity功能,简化后Live Activity仅包含一个暂停/恢复训练的按钮:训练运行时按钮标题为“Pause”,暂停时为“Resume”。
通过AppIntents处理Live Activity上的按钮点击,将操作传递至后台持续运行的主App(主App会在训练结束前3秒播放音效,因此保持后台活跃状态),主App接收操作后完成训练的暂停/恢复逻辑。
核心问题
主App调用Activity.update(_ content: ActivityContent<Activity.ContentState>) async方法更新Live Activity按钮标题时,仅在App进入后台后的前十几秒内有效,之后更新完全停止,但Live Activity上的按钮始终可正常响应点击。
观察到App Store中部分同类应用可在后台长时间更新Live Activity,且无需依赖远程推送通知(离线/飞行模式下仍可正常工作),现寻求后台响应用户操作时强制更新Live Activity的解决方案。
附代码与日志
更新代码
class func updateCircularRunLiveActivity(stateString: String.... more values here) { if ActivityAuthorizationInfo().areActivitiesEnabled { if let activityID = UserDefaults.standard.string(forKey: "CircularRunLiveActivity_ID") { let activity = Activity<CurcularRunWidgetAttributes>.activities.first(where: { $0.id == activityID }) let updatedState = CurcularRunWidgetAttributes.ContentState(stateString: stateString.... more values here) Task { await activity?.update(.init(state: updatedState, staleDate: nil)) print("Live Activity updated. \(updatedState.stateString) - \(activity?.content.state.stateString)") } } } }
主App前台日志
Live Activity updated. 0 - nil Live Activity updated. 1 - Optional("") Live Activity updated. 2 - Optional("1") Live Activity updated. 3 - Optional("2") Live Activity updated. 4 - Optional("3") Live Activity updated. 5 - Optional("4") Live Activity updated. 6 - Optional("5") Live Activity updated. 7 - Optional("6") Live Activity updated. 8 - Optional("7") Live Activity updated. 9 - Optional("8") Live Activity updated. 10 - Optional("9") Live Activity updated. 11 - Optional("10")
主App后台日志
Live Activity updated. 0 - nil Live Activity updated. 1 - Optional("") Live Activity updated. 2 - Optional("1") Live Activity updated. 3 - Optional("2") Live Activity updated. 4 - Optional("2") <- not updated to State with stateString == "3" Live Activity updated. 5 - Optional("2") <- and stuck forever Live Activity updated. 6 - Optional("2") <- ... Live Activity updated. 7 - Optional("2") Live Activity updated. 8 - Optional("2") Live Activity updated. 9 - Optional("2") Live Activity updated. 10 - Optional("2") Live Activity updated. 11 - Optional("2")
补充说明
更新频率不影响问题:每秒更新时会在stateString约为15时卡住;10秒一次更新时则在前15秒内有效,之后停止更新。
内容的提问来源于stack exchange,提问作者Grigoriy Uskov
相关产品推荐
相关产品推荐

