我有一个实时活动,需要经常更新它,例如每分钟或每隔几分钟,就像 Uber 应用程序更新其实时活动以向您显示行程进度一样。我知道推送通知是一种通用的替代方案,但我想首先了解本地路径,因为当前的文档(从 iOS 16.4 / Xcode 14.3 开始)似乎建议我使用staleDate+ 后台任务是 Apple 推荐的一种方法即使文档没有具体说明更新之间的频率/时间间隔,也要保持您的活动更新。
首先,我像这样设置我的活动:
if ActivityAuthorizationInfo().areActivitiesEnabled {
let state = MyAttributes.ContentState(info: info)
let attributes = MyAttributes(name: "test")
let content = ActivityContent(state: state, staleDate: Date(timeIntervalSinceNow: Self.activityUpdateTimeInterval)) // e.g. 60 seconds
currentActivity = try Activity.request(attributes: attributes, content: content)
observeActivityStateUpdates()
}
Run Code Online (Sandbox Code Playgroud)
在第二个函数中,observeActivityStateUpdates我试图观察activityStateUpdates流的变化:
private func observeActivityStateUpdates() {
Task { [weak self] in
guard let activityStateUpdates = self?.currentActivity?.activityStateUpdates else { return }
for await update in activityStateUpdates {
print("LiveActivity: new state \(String(reflecting: update))")
if update == .stale {
Task { [weak self] in
await self?.updateActivityWithNewData()
}
}
}
print("LiveActivity: task observing activityStateUpdates has ended.")
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的期望是,当迭代 ActivityStateUpdates 中的异步序列时,我会在这里获得 .stale 值。但由于某些原因,这种情况从未发生。我只获得了第一个 .active 更新,然后在 iOS 16.4.1 上的合理测试时间内从未有过 .stale 更新。我也从来没有到达task observing activityStateUpdates has endedprint 语句,所以它不像序列在 one 之后过早结束.active。
我是否误解了这种方式staleDate并且activityStateUpdates打算在这里使用?
| 归档时间: |
|
| 查看次数: |
501 次 |
| 最近记录: |