简介:
NSURLSession是IOS SDK提供的一组相对容易使用的网络API。它包括几个部分URLSessionConfiguration、URLSessionDelegate、URLSessionTask(组)、URLRequest、URLCache、
URLSessionConfiguration指定NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息
URLSessionConfiguration:
创建URL绘话配置对象
1、class var `default`: URLSessionConfiguration // 默认的URL会话配置对象,其存储方式是基于硬盘的持久化存储方式,会保存用户的证书到钥匙串中
2、class var ephemeral: URLSessionConfiguration // 与第一个类似,不同之处在于存储的位置不同,此方式存储的位置是内存中
3、class func background(withIdentifier: String) -> URLSessionConfiguration
创建一个可以在后台甚至APP已经关闭的时候仍然在传输数据的会话。注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样在APP下次运行的时候,能够根据identifier来进行相关的区分。
如果用户关闭了APP,IOS 系统会关闭所有的background Session。而且,被用户强制关闭了以后,IOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会继续。
常规的属性
1、var identifier: String? // 配置后台会话的唯一标识符
2、var httpAdditionalHeaders: [AnyHashable : Any]? // 请求头
3、var networkServiceType: NSURLRequest.NetworkServiceType // 网络服务类型
4、var allowsCellularAccess: Bool // 会话是否允许蜂窝数据
5、var timeoutIntervalForRequest: TimeInterval // 进行请求连接的超时时间
6、var timeoutIntervalForResource: TimeInterval // 允许请求的请求最长时间
7、var sharedContainerIdentifier: String? // 后台URL会话中的共享标识符
8、var waitsForConnectivity: Bool // 等待连接是否立刻改变成可用或者不可用
例子一、创建默认的请求会话配置
/*创建默认的URL会话配置*/
func creatDefautConfig() -> Void {
let defaultConfig:URLSessionConfiguration = URLSessionConfiguration.default
self.setHttpHeadersAndInfo(configuration: defaultConfig)
}
/*配置附加请求头字典和其他信息*/
private func setHttpHeadersAndInfo(configuration:URLSessionConfiguration) -> Void {
/*请求头*/
let headers = ["content-type":"application/json;charset=UTF-8"]
configuration.httpAdditionalHeaders = headers
/*网络服务类型*/
configuration.networkServiceType = .default // 标准网络流量
/*禁止使用蜂窝移动连接*/
configuration.allowsCellularAccess = false
/*超时连接*/
configuration.timeoutIntervalForRequest = 30
/*请求时长*/
configuration.timeoutIntervalForResource = 30 * 10
}
例子二、创建存储在内存中的请求会话配置
/*创建存储在内存中的会话类型*/
func creatMeral() -> Void {
let meralConfig:URLSessionConfiguration = URLSessionConfiguration.ephemeral
self.setHttpHeadersAndInfo(configuration: meralConfig)
}
/*配置附加请求头字典和其他信息*/
private func setHttpHeadersAndInfo(configuration:URLSessionConfiguration) -> Void {
/*请求头*/
let headers = ["content-type":"application/json;charset=UTF-8"]
configuration.httpAdditionalHeaders = headers
/*网络服务类型*/
configuration.networkServiceType = .default // 标准网络流量
/*禁止使用蜂窝移动连接*/
configuration.allowsCellularAccess = false
/*超时连接*/
configuration.timeoutIntervalForRequest = 30
/*请求时长*/
configuration.timeoutIntervalForResource = 30 * 10
}
例子三、创建后台请求会话配置
/*后台类型URL会话配置*/
func creatBackgroundConfig() -> Void {
let identifier:String = self.craetInentfire()
let back:URLSessionConfiguration = URLSessionConfiguration.background(withIdentifier: identifier)
self.setHttpHeadersAndInfo(configuration: back)
}
/*创建后台会话唯一标识符*/
func craetInentfire() -> String {
let date:Date = Date.init(timeIntervalSinceNow: 0)
let timeInterval:TimeInterval = date.timeIntervalSince1970
let identifier = "\(timeInterval)"
return identifier
}
/*配置附加请求头字典和其他信息*/
private func setHttpHeadersAndInfo(configuration:URLSessionConfiguration) -> Void {
/*请求头*/
let headers = ["content-type":"application/json;charset=UTF-8"]
configuration.httpAdditionalHeaders = headers
/*网络服务类型*/
configuration.networkServiceType = .default // 标准网络流量
/*禁止使用蜂窝移动连接*/
configuration.allowsCellularAccess = false
/*超时连接*/
configuration.timeoutIntervalForRequest = 30
/*请求时长*/
configuration.timeoutIntervalForResource = 30 * 10
}