我正在開發一個應用程序,每天都需要更新我應用程序中的數據。我決定使用後臺抓取。我從API下載數據,所以我使用URLSession。由於performFetchWithCompletionHandler
中沒有允許完成處理程序,因此我正在使用委託來實現此目的。但我的問題是,當我嘗試更新數據時,我的應用程序沒有運行功能didRecieve data
未被調用。我做錯了什麼,或者我應該使用其他什麼來每天從API更新數據?在後臺抓取中使用URLSession更新數據
我的代碼如下:
func createTask(url: String, id: String){
let accessKey = UserDataService().getCurrentUser().accessToken
let backgroundConfigObject = URLSessionConfiguration.background(withIdentifier: id + UUID().uuidString)
let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)
var request = URLRequest(url: URL(string: url)!)
request.setValue("Bearer \(accessKey!)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "GET"
let task = backgroundSession.dataTask(with: request)
task.resume()
print("task resumed")
}
這個函數被調用內部performFetchWithCompletionHandler
並創建新dataTask
但didRecieve data
不叫。
我也嘗試添加內部performFetchWithCompletionHandler
print("BG FETCH")
let url = "secret url"
var request = URLRequest(url: URL(string: url)!)
request.setValue("SOME KEY", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "GET"
URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
print("DATA",data)
completionHandler(.newData)
}).resume()
謝謝你的任何建議,這個代碼!
我不確定,但非常懷疑它可以*從backgroundState *開始* backgroundSession。 如果它已經*在前臺啓動,則只能繼續。想象一下,如果應用程序能夠進行長時間的後臺下載並且用戶永遠不知道,並且使用他的手機數據下載了實現的5Gb,會發生什麼情況。他們會立即刪除您的應用程序! – Honey
@Honey然後你有什麼建議。我的應用程序取決於更新。 – Phyber
我還沒有使用過後臺App刷新,但看了一下,沒有看到任何提及:「在performFetchWithCompletionHandler中不允許完成處理程序」< - 爲什麼你要這樣說?這是基於文檔嗎? – Honey