妥协?
时间临近2017年1月1日,对于其他开发者来说,这是再普通不过的元旦。然而对于我等iOS小民而言,怕要彻夜难眠了。跟领导说:“老大,元旦之后,苹果不让“裸奔”了”,领导总是一副不屑的眼神:“等等看,车到山前自有路,总会有办法的”。
好打脸,这下好了,12月21日,苹果发文,苹果APP接入HTTPS截止日期延迟,具体日期待定......
好吧!领导,您是对的!
看到这则消息,很多人都在为还能继续“裸奔”而欢呼雀跃,自欺欺人的以为这是苹果妥协的结果,事实真的如此吗?对于这种观点,我只能送你一句,别高兴太早,人家只是告诉你:“小子,这次我们是要玩真的”。
强制使用ATS是不是苹果过于激进,那以后上线版本是不是必须要买证书啦,也不见得,其实iOS依旧可以使用HTTP,只是我们上线的时候,要做出合理解释而已。擦边球还是可以打一下的,我们可以在info.plist中,将服务端host:xxx.com添加到Exception Domains中,分别设置(可悲的是擦边球只能iOS10+):╮(╯_╰)╭
NSIncludesSubdomains: YES; // 含义是子域名是否适用
NSExceptionAllowsInsecureHTTPLoads: YES; // 是否允许不安全HTTP负载
NSExceptionRequiresForwardSecrecy: NO; // 是否适用前置加密
或者
NSIncludesSubdomains: YES;
NSThirdPartyExceptionAllowsInsecureHTTPLoads: YES; // 是否允许第三方不安全HTTP负载
NSThirdPartyExceptionRequiresForwardSecrecy: NO; // 第三方是否适用前置加密
info.plist
即,将域名xxx.com避开ATS验证,依旧支持HTTP,不过我们需要解释说明,可以说需要访问的域名是第三方的,他们不支持HTTPS,不过如果访问的是自己的服务器的话,这个理由有点悬iOS喵神[2]。不过为稳妥起见,我们还是尽快适配HTTPS为好。
info.plist code:
<key>NSExceptionDomains</key>
<dict>
<key>xxx.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key> NSExceptionAllowsInsecureHTTPLoads </key>
<true/>
<key> NSExceptionRequiresForwardSecrecy </key>
<false/>
</dict>
......
<key>weibo.cn</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
参考:
【1】 苹果ATS(强制HTTPS)审核新政解码
【2】关于 iOS 10 中 ATS 的问题
网友评论