我正在开发一个应用程序,我需要每天更新我的应用程序中的数据。我决定使用后台获取。我正在从 API 下载数据,所以我使用的是 URLSession。由于不允许完成处理程序,因此performFetchWithCompletionHandler
我为此目的使用委托。但我的问题是,当我的应用程序未运行时尝试更新数据时,didRecieve data
不会调用该函数。我是在做错什么,还是应该每天使用其他东西从 API 更新我的数据?
我的代码如下:
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()
感谢您的任何建议!