Я пытаюсь создать базовое проверочное приложение для WatchOS и усложнение, которое извлекает данные JSON из API и отображает на их основе шкалу.Я смотрел Apple «Обновление приложения для ваших часов» и нашел несколько других вопросов по этому вопросу, но пример кода был удален.
API предоставляет прогнозы на следующие~ 48 часов и может использоваться для заполнения записей графика времени для осложнения.Когда контроллер Complication запрашивает записи временной шкалы, я извлекаю данные из Extension Extension, и поэтому они должны обновляться.Однако процесс планирования фоновых задач поставил меня в тупик.Когда я вызываю backgroundSession.dataTask(with: URL(string: "https://......
, я ожидаю, что мои URLSessionDataDelegate
функции будут вызываться, но они никогда не будут вызываться, и я никогда не получаю handle(_ backgroundTasks)
, вызываемый с WKURLSessionRefreshBackgroundTask
Вопрос: КогдаWKApplicationRefreshBackgroundTask
отправляется на мой ExtensionDelegate
как мне запрашивать / планировать данные из API и затем получать их?
Код
//ExtensionDelegate
class ExtensionDelegate: NSObject, WKExtensionDelegate, URLSessionDelegate, URLSessionDataDelegate {
...
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let backgroundTask as WKApplicationRefreshBackgroundTask:
print("background task as WKApplicationRefreshBackgroundTask")
self.scheduleURLSession()
backgroundTask.setTaskCompletedWithSnapshot(false)
return
case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
print("background task as WKURLSessionRefreshBackgroundTask")
let backgroundConfigObject =
URLSessionConfiguration.background(withIdentifier: urlSessionTask.sessionIdentifier)
let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)
print("Rejoining session ", backgroundSession)
self.savedTask = urlSessionTask
return
default:
// make sure to complete unhandled task types
task.setTaskCompletedWithSnapshot(false)
}
}
}
func scheduleURLSession() {
let backgroundConfigObject = URLSessionConfiguration.background(withIdentifier: "nz.co.craigstanton")
backgroundConfigObject.sessionSendsLaunchEvents = true
let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)
let dataTask = backgroundSession.dataTask(with: URL(string: "https://craigstanton.co.nz/uvi-test?latitude=-36&longitude=174")!)
print("scheduleURLSession about to 'resume' ")
dataTask.resume()
}
//Delegate callbacks
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
print("Data task error", error)
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse,
completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
print("urlSession Delegate did receive everything ")
}
func urlSession(_: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
print("urlSession Delegate did receive something ")
}