Для упрощения скажем: «Моя онлайн-активность» содержит только кнопку для приостановки и возобновления тренировки, поэтому ее заголовок « «Пауза», если тренировка выполняется, и «Возобновить», если она приостановлена.
Я использую AppIntents для обработки нажатия кнопок в реальном времени, передаю действие (не спрашивайте, каким образом) основному работающему приложению. в фоновом режиме (звучит за 3 секунды до тренировки) конец, поэтому оно определенно работает), основное приложение обрабатывает нажатие, ставит на паузу/и возобновляет тренировку.
Звучит хорошо...
В основном Приложение, мне нужно обновить Live Activity, чтобы изменить заголовок кнопки на «Возобновить/Пауза».
Я использую Activity.update(_ content: ActivityContent) async
Проблема в том, что UPDATE работает в первых нескольких (до десяти) секунд после того, как я отправляю приложение в фоновый режим (перейдите на экран блокировки, где находится моя активность в реальном времени).
Кнопка в режиме реального времени РАБОТАЕТ ВСЕ ВРЕМЯ. Но Activity.update перестает что-либо делать.
Есть идеи, как принудительно обновлять Live Activity в ответ на действия пользователя, когда приложение находится в фоновом режиме?
Я вижу примеры приложений в AppStore, которым удается обновлять Live Activity даже в фоновом режиме в течение длительного времени.
Я не верю, что они делают это с помощью удаленных push-уведомлений (потому что он работает даже в автономном режиме/режиме полета).
Спасибо.
UPD: обновите код детали и журналы:
Код: Выделить всё
class func updateCircularRunLiveActivity(stateString: String.... more values here) {
if ActivityAuthorizationInfo().areActivitiesEnabled {
if let activityID = UserDefaults.standard.string(forKey: "CircularRunLiveActivity_ID") {
let activity = Activity.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)")
}
}
}
}
Код: Выделить всё
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")
Код: Выделить всё
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")
Подробнее здесь: [url]https://stackoverflow.com/questions/79309488/ios-live-activity-update-from-background[/url]
Мобильная версия