0
我试图在同一请求中创建图像和视频的后台上传。我创建了后台任务自定义SessionManager:Alamofire在后台完成应用程序
let configuration = URLSessionConfiguration.background(withIdentifier: "by.wink.citynews.upload.background")
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
let sessionManager = Alamofire.SessionManager(configuration: configuration)
然后我就与下面的代码请求:
func uploadNews(newsCreating: NewsCreating, progressHandler: @escaping (Double)->Void, completion: @escaping NewsCreatingCallback) {
let parameters: [String: String] = ["text" : newsCreating.text, "category" : newsCreating.category.id]
backgroundManager.upload(multipartFormData: { multipartFormData in
for (key, value) in parameters {
multipartFormData.append(value.data(using: .utf8)!, withName: key)
}
newsCreating.images.forEach({ image in multipartFormData.append(image.jpegCompressedData, withName: "images[]", fileName: "\(image.name).jpg", mimeType: "image/jpeg") })
if let video = newsCreating.video {
multipartFormData.append(video.url, withName: "video", fileName: "\(video.name).mp4", mimeType: "video/mp4")
}
}, to: URL(string: "http://api.someapi.com/endpoint")!, method: .post) { encodingResult in
switch encodingResult {
case .success(let uploadRequest , _, _):
// custom response for auto-parsing of json
uploadRequest.responseServiceObject { (response: DataResponse<ServiceResult<NewsReporting, NewsCreatingServiceError>>) in
// (*) alamofire completion, here is the problem.
switch(response.result) {
case .success(let serviceResult):
if serviceResult.success {
completion(.success(serviceResult.response))
} else {
completion(.clientError(serviceResult.errors))
}
case .failure(let error):
completion(.error(error as! CityNewsError))
}
uploadRequest.uploadProgress() { requestProgressHandler in
progressHandler(requestProgressHandler.fractionCompleted)
}
}
case .failure(let error):
print(error)
}
}
}
的问题是,请求(*)的完成,只调用当应用程序在前台。似乎应用程序在后台运行时,alamofire仍然继续上传(因为URLSessionConfiguration.background),但只有当应用程序再次进入前台时才会调用完成。如果应用在后台上传完成,我想显示UNNotification。可能吗?
具有完成闭包的viewController在捕获列表中具有弱自我,但是当应用程序进入后台时,此视图控制器不会被销毁。 Morover,当应用程序在前台返回时,调用完成并显示通知。 –