美文网首页
iOS10 ATS https

iOS10 ATS https

作者: 半江瑟瑟 | 来源:发表于2016-12-13 16:17 被阅读184次

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。

Paste_Image.png
 <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

相关文章

网友评论

      本文标题:iOS10 ATS https

      本文链接:https://www.haomeiwen.com/subject/xfkbmttx.html