我正在开发一款使用Alamofire 4.4和Swift 3.0的iOS下载应用程序。
该应用获取网址并使用Alamofire下载该文件。 我正在使用后台会话管理器,以便应用程序可以在后台下载并在完成后发送通知。
由于某些原因,添加此功能后,即使启用飞行模式,也不会触发.failure响应。 如果它关闭飞机模式,下载奇怪地继续下去,但留下足够长的时间并且它不会继续下载,所以你会想象它会触发失败......
我有下载请求的代码:
if let resumeData = resumeData {
request = BackendAPIManager.sharedInstance.alamoFireManager.download(resumingWith: resumeData, to: destination)
}
else {
request = BackendAPIManager.sharedInstance.alamoFireManager.download(extUrl, to: destination)
}
alamoRequest = request
.responseData { response in
switch response.result {
case .success:
//get file path of downloaded file
let filePath = response.destinationURL?.path
completeDownload(filePath: filePath!)
case .failure:
//this is what never calls on network drop out
print("Failed")
}
.downloadProgress { progress in
let progressPercent = Float(progress.fractionCompleted)
//handle other progress stuff
}
}
.success case触发正常,进度恢复正常。 如果我使用alamoRequest取消下载?.cancel(),那么它会触发.failure案例。
这是我的完成处理程序:
class BackendAPIManager: NSObject {
static let sharedInstance = BackendAPIManager()
var alamoFireManager : Alamofire.SessionManager!
var backgroundCompletionHandler: (() -> Void)? {
get {
return alamoFireManager?.backgroundCompletionHandler
}
set {
alamoFireManager?.backgroundCompletionHandler = newValue
}
}
fileprivate override init()
{
let configuration = URLSessionConfiguration.background(withIdentifier: "com.uniqudeidexample.background")
self.alamoFireManager = Alamofire.SessionManager(configuration: configuration)
}
}
在我的AppDelegate中:
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
BackendAPIManager.sharedInstance.backgroundCompletionHandler = completionHandler
//do other notification stuff...
}
在我添加后台会话之前,它工作正常,当我激活飞行模式时,它失败了。我错过了什么吗?
希望一切都有意义,这是我的第一个应用程序,所以没有了解所有技术细节,
由于