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。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>weibo.com</key>
<dict>
<key>NSIncludesSubdomains </key>
<true/>
<key>NSExceptionRequiresForwardSecrecy </key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>a3.topitme.com</key>
<dict>
<key>NSIncludesSubdomains </key>
<true/>
<key>NSExceptionRequiresForwardSecrecy </key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
<key>NSAllowsArbitraryLoadsInMedia</key>
<true/>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
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
网友评论