编辑
对于 Alamofire 5,这不再可能,请参阅发行说明:
不使用带有背景标识符的URLSessionConfiguration
再有可能。我们明确确保 Alamofire 不与
后台会话,以防止围绕支持的持续问题
并让用户感到惊讶。
旧答案,如果您使用 Alamofire 4 仍然有效
使用 Alamofire 其实很简单:
1) 你的 Alamofire.Manager 应该配置一个后台会话标识符:
class NetworkManager {
...
private lazy var backgroundManager: Alamofire.SessionManager = {
let bundleIdentifier = ...
return Alamofire.SessionManager(configuration: URLSessionConfiguration.background(withIdentifier: bundleIdentifier + ".background"))
}()
...
}
2) 在 App Delegate 中实现 application(_:handleEventsForBackgroundURLSession:completionHandler: 并将完成处理程序传递给 Alamofire.SessionManager.backgroundCompletionHandler。
在我的例子中,应用委托方法看起来像
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
NetworkManager.default.backgroundCompletionHandler = completionHandler
}
我的网络管理器有一个这样的计算属性来设置 Manager 属性:
var backgroundCompletionHandler: (() -> Void)? {
get {
return backgroundManager.backgroundCompletionHandler
}
set {
backgroundManager.backgroundCompletionHandler = newValue
}
}