用户通过按下执行以下操作的按钮来安排后台任务(即在应用程序中打开通知):
WKApplication.shared().scheduleBackgroundRefresh(withPreferredDate: Date(timeIntervalSinceNow: 5), userInfo: nil) { (error: Error?) in
if let error = error {
print("Error occured while scheduling background refresh: \(error.localizedDescription)")
} else {
print("scheduled")
}
}
此任务的处理方式如下:
class ApplicationDelegate: NSObject, WKApplicationDelegate {
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
// schedule a new task for tomorrow ✅
// refresh app data - in progress
// immediately trigger a local notification with fresh data ✅
task.setTaskCompletedWithSnapshot(false)
}
}
}
现在,如果用户关闭通知,此操作必须清除所有挂起的通知请求,但这是没有实际意义的,因为预定的后台任务仍将运行,循环和通知将在第二天继续(或者,至少后台任务将继续运行,而不管通知是否触发)。我找不到关于如何取消调度/删除已调度后台任务的文档(s),用户如何主动地(通过点击按钮)完成这一操作?
1条答案
按热度按时间mkshixfv1#
不存在这样的后台任务"队列";一次只能安排一个后台任务。安排一个新任务会取消任何以前安排的任务(所以从技术上讲,它是一个最大深度为1的队列)😀)
后台任务启动后,请检查用户的首选项以查看他们是否仍需要通知。如果仍需要通知,请发布通知并计划另一个任务。如果不需要,则操作已完成。
每当手表应用离开前台时,您都可以检查通知是否已启用,并安排后台任务。
如果以前没有计划任务,那么现在有了,如果以前有计划任务,那么你刚刚替换了它;没问题。