飞机模式开启时,Alamofire没有失败

时间:2017-03-30 19:31:47

标签: ios xcode download swift3 alamofire

我正在开发一款使用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...
}

在我添加后台会话之前,它工作正常,当我激活飞行模式时,它失败了。我错过了什么吗?

希望一切都有意义,这是我的第一个应用程序,所以没有了解所有技术细节,

由于

0 个答案:

没有答案