iOS10 ATS https

iOS 9中默认非HTTS的网络是被禁止的,当然我们也可以把NSAllowsArbitraryLoads
设置为YES 来禁用ATS
不过iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒绝。

**只考虑 iOS10**

1.访问特定的若干个接口--NSExceptionDomains
我们可以通过NSExceptionDomains来针对特定的域名开放HTTP,可以容易通过审核。(但是也需要申请 说明原因)
NSExceptionDomains方式 设置域。可以简单理解成,把不支持https协议的接口设置成http的接口。
具体方法:
1)、在项目的info.plist中添加一个Key:App Transport Security Settings,类型为字典类型。
2)、然后给它添加一个Exception Domains,类型为字典类型;
3)、把需要的支持的域添加給Exception Domains。其中域作为Key,类型为字典类型。
4)、每个域下面需要设置3个属性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。

iOS10 ATS https_第1张图片
Paste_Image.png
 NSAppTransportSecurity
 
     NSExceptionDomains
     
         weibo.com
         
              NSIncludesSubdomains 
              
              NSExceptionRequiresForwardSecrecy 
              
              NSExceptionAllowsInsecureHTTPLoads
              
         
         a3.topitme.com
         
              NSIncludesSubdomains 
              
              NSExceptionRequiresForwardSecrecy 
              
              NSExceptionAllowsInsecureHTTPLoads
              
         
     
     NSAllowsArbitraryLoads
     
     NSAllowsArbitraryLoadsInWebContent
     
    NSAllowsArbitraryLoadsInMedia
    
    NSAllowsLocalNetworking
    
 

2.需要通过webView访问网页
NSAllowsArbitraryLoadsInWebContent
设置为 YES,解除通过 web view 发出的网络请求的 ATS 限制。启用这个键,可以使 app 访问任意网页内容,但不影响 app 的总体 ATS 策略。此键值默认为 NO。

3.需要利用avfoundation播放网络视频
NSAllowsArbitraryLoadsInMedia

设置为 YES,解除通过 AV Foundation 框架访问媒体内容时的 ATS 限制;启用这个 键,务必确保载入的媒体内容已经被加密,例如受FairPlay保护的文件,或者是安全的 HLS流媒,其中不包含敏感的个人信息。默认为 NO。

4.需要访问局域网
NSAllowsLocalNetworking
设置为 YES,使得 app 可以载入任意本地资源,但不影响 app 的总体 ATS 策略。默 认为 NO。

5.这些都不能满足你多变不可预测的http访问,只能采用大招
NSAllowsArbitraryLoads
设置为YES 来禁用ATS (但是不好通过审核)

**需要兼容iOS9**

上面iOS10的加上+NSAllowsArbitraryLoads设置为YES 来禁用ATS (但是不好通过审核)

 iOS10中上面几个键(1-4)会屏蔽NSAllowsArbitraryLoads,也就是只要有上面几个键,iOS10就不会实现NSAllowsArbitraryLoads.但是悲剧的是这几个键iOS9不起作用.
还有iOS10中NSAllowsArbitraryLoadsInWebContent和NSExceptionDomains不兼容,就是各自管各自的,不会因为你这个地方开启了,那边也能起效了.比如你在NSExceptionDomains加上了weibo.com.但是你用WKWebView访问weibo,还是不行的!

最后本人没有做过ATS的app,都是整理网络资料,不是实际上架经验,仅供参考.还有不理解的参考下面的文章.
参考文章
喵神博客:https://onevcat.com/2016/06/ios-10-ats/
大牛:http://www.jianshu.com/p/36ddc5b009a7(强推!)
日本人的:http://qiita.com/caffezom/items/e2397de6ae969773e41f

你可能感兴趣的:(iOS10 ATS https)