苹果公司规定从2016年6月1日开始所有新上架的app开始审核IPv6的支持,至于原因大家都知道。从5月份开始我们的app就开始为了这个规定修改网络请求,值得庆幸的是一直上线都很顺利。从8月份开始陆陆续续的就有朋友说他们的app因为IPv6的原因被拒了,当时我还一直以为是因为他们的服务器不支持IPv6的原因,不过他们一般都是第二天重新提交就会通过,总之就是稀里糊涂的就上线了,我们的项目在最近一次提审终于也因为IPv6被拒了。可是我们从6月份开始就一直没有修改过网络请求啊,为什么以前都没事,只有这次被拒啦,不可能是因为以前苹果审核没有审核这个方面的,于是开始各种查资料,各种研究,终于发现了原因。
首先说一下app网络请求的过程:
这个官网上给出的一个流程图,首先app发送一个IPv6的网络请求,然后在DNS服务器会先解析你这个IPv6看看路由里面有没有这个IPv6的地址,如果有的话会直接找到这个地址并且链接,如果没有找到这个地址的话DNS64会自动把这个IPv6的地址转换成IPv4的地址,如果能找到就会把这个当成你要访问的地址,如果还是找不到的话就会返回找不到地址。
那么为什么苹果公司审核有的时候能够通过,而有的时候不能通过呢?那是因为咱们的DNS都是在国内的,而苹果是在美国的IPv6环境上测试的,当他们的ATS向你的DNS发送请求时,如果链接不通,那么苹果审核人员就会认为是你的不支持IPv6,所以就会被拒,这种情况下你只需要再次提交审核就好了。
那么说了这么多咱们需要做什么呢,首先你要把链接都换成域名形式的,不要写成IP地址的,这是为了确保DNS可以转换,如果网络请求你是用的第三方,比如AFNetworking,那么你只需要升级成最新版本就可以了,如果是自己写的那么请用NSURLSession。
官网上关于这方面是这样写的,只说了NSURLSession和CFNetwork,网上有的人说NSURLConnection在ISO9下是支持IPv6的,不过为了保险起见还是用NSURLSession。
网上的资料都是说NSURLSession支持IPv6,NSURLConnection不支持,但是我当时就是不知道支持部支持表现在哪方面,又为什么不支持,是因为NSURLSession和CFNetwork可以把IPv4合成IPv6。
我们客户端需要做的就是这些了。
最后你需要搭建一个IPv6的环境测试你的部署是否正确,搭建环境请自己百度,友情提示,如果你的电话连不上马Mac热点,提示链接失败或者密码错误,那么不要怀疑自己,请重新启动电脑,在按照流程重新创建一个NAT64的热点,如果还是连不上那么就换台电脑吧,千万不要怀疑自己,不要认为苹果公司做了这么多年的电脑,一个热点肯定不会有问题,呵呵,这个真的是苹果公司的问题。。。。