iOS網絡-NSURLSessionConfiguration會話配置


作用:可以統一配置NSURLSession,如請求超時等

創建配置的三種方式

+ (NSURLSessionConfiguration *)defaultSessionConfiguration; //返回標准配置,這實際上與NSURLConnection的網絡協議棧是一樣的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage。
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration; //返回一個預設配置,沒有持久性存儲的緩存,Cookie或證書。這對於實現像"秘密瀏覽"功能的功能來說,是很理想的。
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier NS_AVAILABLE(10_10, 8_0); //獨特之處在於,它會創建一個后台會話。后台會話不同於常規的,普通的會話,它甚至可以在應用程序掛起,退出,
崩潰的情況下運行上傳和下載任務。初始化時指定的標識符,被用於向任何可能在進程外恢復后台傳輸的守護進程提供上下文。

重要的屬性:

 

# 替代 request 中的 forHTTPHeaderField 告訴服務器有關客戶端的附加信息
"HTTPAdditionalHeaders"指定了一組默認的可以設置出站請求的數據頭。這對於跨會話共享信息,如內容類型,語言,用戶代理,身份認證,是很有用的。

# WebDav的身份驗證
NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];
NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];

# 設置客戶端類型

NSString *userAgentString = @"iPhone AppleWebKit";

configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json",
                                        @"Accept-Language": @"en",
                                        @"Authorization": authString,
                                        @"User-Agent": userAgentString};

"networkServiceType(網絡服務類型)"對標准的網絡流量,網絡電話,語音,視頻,以及由一個后台進程使用的流量進行了區分。大多數應用程序都不需要設置這個

"allowsCellularAccess(允許蜂窩訪問)""discretionary(自行決定)"被用於節省通過蜂窩連接的帶寬。建議在使用后台傳輸的時候,使用discretionary屬性,
而不是allowsCellularAccess屬性,因為它會把WiFi和電源可用性考慮在內
"timeoutIntervalForRequest""timeoutIntervalForResource"指定了請求以及該資源的超時時間間隔。許多開發人員試圖使用timeoutInterval去限制發送請求的總時間,但這誤會了timeoutInterval的意思:報文之間的時間。timeoutIntervalForResource實際上提供了整體超時的特性,這應該只用於后台傳輸,而不是用戶實際上可能想要等待的任何東西

"HTTPMaximumConnectionsPerHost"Foundation 框架中URL加載系統的一個新的配置選項。它曾經被用於NSURLConnection管理私人連接池。現在有了NSURLSession,開發者可以在需要時限制連接到特定主機的數量

"HTTPShouldUsePipelining"也出現在NSMutableURLRequest,它可以被用於開啟HTTP管道,這可以顯着降低請求的加載時間,但是由於沒有被服務器廣泛支持,默認是禁用的

"sessionSendsLaunchEvents" 是另一個新的屬性,該屬性指定該會話是否應該從后台啟動

"connectionProxyDictionary"指定了會話連接中的代理服務器。同樣地,大多數面向消費者的應用程序都不需要代理,所以基本上不需要配置這個屬性
關於連接代理的更多信息可以在 CFProxySupport Reference 找到。

"Cookie Policies"
"HTTPCookieStorage" 是被會話使用的cookie存儲。默認情況下,NSHTTPCookieShorage+ sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的
"HTTPCookieAcceptPolicy" 決定了該會話應該接受從服務器發出的cookie的條件
"HTTPShouldSetCookies" 指定了請求是否應該使用會話HTTPCookieStoragecookie

"Security Policies"
  URLCredentialStorage 是會話使用的證書存儲。默認情況下,NSURLCredentialStorage + sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的

"TLSMaximumSupportedProtocol" "TLSMinimumSupportedProtocol" 確定是否支持SSLProtocol版本的會話

"Caching Policies"
URLCache 是會話使用的緩存。默認情況下,NSURLCache + sharedURLCache 會被使用,這與NSURLConnection是相同的
requestCachePolicy 指定了一個請求的緩存響應應該在什么時候返回。這相當於NSURLRequest -cachePolicy方法

"Custom Protocols"
protocolClasses是注冊NSURLProtocol類的特定會話數組

 

統一配置NSURLSession代碼示例:

-(NSURLSession *)session { if (_session == nil) { //創建NSURLSessionConfiguration
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; //設置請求超時為10秒鍾
        config.timeoutIntervalForRequest = 10; //在蜂窩網絡情況下是否繼續請求(上傳或下載)
        config.allowsCellularAccess = NO; _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; } return _session; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM