iOS ATS / HTTPS的问题
ATS:
App Transport Security应用程序传输安全机制
iOS 9起苹果就开始推荐使用HTTPS,iOS 9中默认是禁止非HTTPS的协议来访问网络的.
想App继续访问非HTTPS呢?
解决方法:
1、在Info.plist中添加NSAppTransportSecurity类型Dictionary。
2、在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean值设为YES。
2017年1月1日起苹果提出所有新提交的App默认不允许使用NSAllowsArbitraryLoads来绕过ATS的限制。
也就是说强制我们用HTTPS,
那么一些第三方的SDK并没有及时支持HTTPS怎么解决呢?
解决办法:
把不支持HTTPS的第三方接口添加到NSExceptionDomains白名单中配置如下:
1、在Info.plist中添加NSAppTransportSecurity类型Dictionary。
2、在NSAppTransportSecurity中添加NSExceptionDomains类型Dictionary。
3、在NSExceptionDomains中添加要支持的域(也就是非HTTPS的接口地址),域作为Key,类型为Dictionary。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>qq.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
HTTPS必然会遇到证书的问题
-
自签证书
证书必须是xxx.cer格式,拖入项目的bundle里面。在 challenge方法内 读取服务器来的证书,和工程内的证书比对。。 -
公信机构颁发的证书
是从哪里买的或者是使用限时免费版只要符合苹果官方的证书要求,具体要求参考:Apple-NSAppTransportSecurity。那么什么都不要设置,只需要启用项目的ATS,就可以HTTPS请求了。。
如果还想添加其它只支持HTTP的请求,按前面Exception Domains的设置即可。