1、在iOS 9的时候,默认非https的网络是被禁止的,我们可以在info.plist文件中添加NSAppTransportSecurity字典,将NSAllowsArbitraryLoads设置为YES来禁用ATS;
2、添加代码
在AppDelegate中实现以下方法
Swift:
extension NSURLRequest{
static func allowsAnyHTTPSCertificateForHost(host:String) ->Bool{
return true
}
}
Objective-C:
@implementation NSURLRequest(NSURLRequestWithIgnoreSSL)
+(BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host
{
returnYES;
}
@end
3、可以通过NSExceptionDomains设置白名单的方式来针对特定的域名来开放http内容来通过审核,简单理解:把不支持https协议的接口设置成http的接口。
如下设置:
或者:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourdomain.com</key>
<dict>
<key>NSExceptionAllowInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
注意:每个需添加的域都需要设置此三个属性。如果请求的网络图片是http,也是需要设置的图片的域。
4、对于网页浏览和视频播放的行为,iOS 10中新加入了NSAllowsArbitraryLoadsInWebContent键。通过将它设置为YES,可以让app中的WKWebView和使用AVFoundation播放的在线视频不受ATS的限制。这也应该是绝大多数使用了相关特性的app的选择。
注意,内容解析:
NSAllowsArbitraryLoads
设置为ture的话,就会使得除了开发者在NSExceptionDomains里面配置的域名以外所有的网络连接不受限制。
NSAllowsArbitraryLoadsInWebContent
设置为ture的话,系统会禁用对来自web视图的请求的所有ATS限制,也就是你的webView的请求不一定需要https,App就可以使用嵌入式浏览器来显示任意内容,但是应用的其他部分还是需要用ATS.
NSExceptionDomains
NSExceptionDomains其实是相当于NSAllowsArbitraryLoads的一个子集。后者是全局的作用,而前者主要是用于对某些域名的限制作用。他的主要作用其实就是用于们自签名的证书。
NSExceptionDomains字典里面各键的值意义如下。
- NSIncludesSubdomains
默认为false,如果设置为ture,则表示当前设置域名的所有子域名也使用同样的配置。
- NSExceptionAllowInsecureHTTPLoads
允许不安全的http请求,这里所谓的不安全,不代表改变了 Transport Layer Security (TLS)或者是https的请求。所谓的不安全主要是因为使用自签名的证书,没有经过CA认证所以苹果并不知道是不是安全的,如果开发者允许那么苹果也允许加载。
- NSExceptionRequiresForwardSecrecy
默认值为ture,如果设置为false,则允许不支持完全前向保密(PFS)的TLS密码(对于指定的域名)。
- NSTemporaryExceptionAllowsInsecureHTTPLoads
默认值是false,如果设置为ture,则表示允许App进行不安全的HTTP请求。