iOS 9中默認非 http 的網(wǎng)絡是被禁止的,我們當時的做法是把App Transport Security Settings下的NSAllowsArbitraryLoads設置為 YES來禁用 ATS。雖有效 ,但過于粗暴,直接禁用了 ATS,違背了蘋果爸爸的初衷,這估計也是蘋果爸爸當時說要在17年元旦起不允許我們通過這個方法跳過 ATS 的原因。
雖然后來發(fā)文推遲執(zhí)行這一決策,但是蘋果爸爸的態(tài)度,卻是比較明朗了。
雖然不能直接禁用 ATS,但是我們可以通過 NSExceptionDomains 來針對特定的域名開放 http 權限。
具體方案:
- 在項目中的info.plist中添加 Key:App Transport Security Settings,類型為字典類型。
- 然后給它添加一個 Exception Domains,類型為字典類型。
- 把需要支持的域添加到 Exception Domains 下,其中域作為 key,類型為字典類型。
- 每個域下設置三個屬性:NSIncludesSubdomains(設置域下對應的子域名是否可用)、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads(設置是否允許不安全的 http)。

1.png
提示:系統(tǒng)中用到的所有非 https 的網(wǎng)絡請求,都要進行設置。比如網(wǎng)絡圖片可能是放在三方托管服務器,只提供 http 訪問,那么這個域也是必須要設置才能獲取到圖片的。