一、创建一个Session,并且对其进行初始化
包含三种创建方式:
1、+ (NSURLSession *)sharedSession 单例模式
2、+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration 这是常规的方式
3、+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue 这是常用的方式
配置方式是也是有三种:
1、+ (NSURLSessionConfiguration *)defaultSessionConfiguration 常规的配置
2、+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration 临时配置
3、+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier: 运行在后台的配置
注意:设置Configuration的值不会改变当前Session方式,只有当你重新初始化一个Session的时候生效
NSURLSessionConfiguration *myconfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"backgroundsession"];
//请求的缓存策略
myconfiguration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
//数据传输超时,当恢复传输时会清零
myconfiguration.timeoutIntervalForRequest = ;
//单条请求超时,决定一条请求的最长生命周期
myconfiguration.timeoutIntervalForResource = ;
//请求的服务类型
myconfiguration.networkServiceType = NSURLNetworkServiceTypeDefault;
//是否允许使用移动网络(电话网络)default is YES
myconfiguration.allowsCellularAccess = YES;
//后台模式生效,YES允许自适应系统性能调节
myconfiguration.discretionary = YES; self.testSession = [NSURLSession sessionWithConfiguration:myconfiguration delegate:self delegateQueue:[NSOperationQueue currentQueue]];
二、实现代理(Session-Level)
选用第三种初始化方式创建的Session会有三个Session级别的代理供大家使用
//session关闭回调
-(void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error
{
NSLog(@"%s,%@",__func__,error);
}
//证书安全问题
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{ } //后台网络任务完成
// 将回调 :-application:handleEventsForBackgroundURLSession:completionHandler:
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{ }