关于IPv6

  App在本地IPv6的测试环境下运行一切正常,结果又是被拒,悲剧缘由仍是IPv6的问题;
求解决方法
被拒缘由
We discovered one or more bugs in your app when reviewed on iPhone running iOS 10.1.1 on Wi-Fi connected to an IPv6 network.

Specifically, we received a network error message when we used the demo account to log in.

Next Steps

Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking
  

  网上好多关于ipv6的资料,说半天ipv6是什么,怎么创建测试环境,,,但是没有看到具体的操做和解决的方案,这里,为你们提供一种方案,但愿给你们带来帮助吧。php

总的来讲有三个方面须要进行检查和修改:html

  一、项目里面涉及和网络有关的网络请求是否支持ipv6。ios

  二、项目里面涉及和网络有关的sdk是否支持ipv6。git

  三、项目的服务器是否支持ipv6。github

 

IPv6的简介服务器

  IPv4 和 IPv6的区别就是 IP 地址前者是 .(dot)分割,后者是以 :(冒号)分割的(更多详细信息自行搜索)。微信

PS:在使用 IPv6 的热点时候,记得手机开飞行模式哦,保证手机只在 Wi-Fi 下上网,以避免手机在链接不到网络时候,会默认跳转到使用 蜂窝移动网络(即2G、3G、4G流量) 上网。网络

  IPV6,是对IPV4地址空间的扩充。目前当咱们用iOS设备链接上Wifi、4G、3G等网络时,设备被分配的地址均是IPV4地址,可是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络以后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,而且仍然能够经过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先经过DNS64 Server查询IPv6的地址,若是查询不到,再向DNS Server查询IPv4地址,经过DNS64 Server合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端。如图所示:app

  网上对于苹果官网上ipv6的文章翻译不少,附上连接,这篇介绍的不错:iOS应用支持IPV6,就那点事儿ide

本地 Mac 搭建 IPv6 测试环境

附上连接:本地如何搭建IPv6环境测试你的APP

上边这些几乎没什么用,网上一搜有不少。。。

  如何判断本身的项目里面是不是ipv六、ipv4呢,咱们用的方法,就是本身项目里面涉及和网络有关的进行一一排查

文章最后会提到ipv6解决的方案除了上述两点还有一个关于服务器的缘由。

  咱们的app自己支持ipv6是由于咱们使用的网络请求是asihttpRequest请求,而asihttpRequest是基于CFNetwork的,苹果有说明CFNetwork库是支持IPV6的。而除了自身的网络请求外,咱们项目中涉及网络的就是三方库了,因此归根到底咱们作的只是第三方库的替换,即:哪些三方库和网络有关,那么挨个查看最新的sdk文档解释是否描述支持ipv6,若是支持,那就替换。若是没说支持,那就不换。

(固然,还能够用cocoadpods替换三方库,关于cocoadpods的学习能够参考本人这篇文章Cocoapods安装

  这种方案须要验证,估计须要几天的时间才能知道上线是否被拒。若是侥幸上线了,我会第一时间在本文里面续写一下。若是被拒,我也会第一时间排查缘由,进行本文的更新。谢谢你们的支持。

已经上线了,该方案可行。

 

那么咱们替换了哪些三方库呢,下边一一列举。(文章下部会有各个三方库的连接)

一、Reachability

按照苹果开发者中心提示,这个必须换。

  新的sdk包将这个方法干掉了:reachabilityForLocalWiFi,只要本身的代码中干掉就好了,没什么影响。

缘由以下介绍:

#pragma mark reachabilityForLocalWiFi

//reachabilityForLocalWiFi has been removed from the sample.  See ReadMe.md for more information.

//+ (instancetype)reachabilityForLocalWiFi;

二、新浪微博

根据官网提示,这个新的sdk支持了ipv6,因此进行替换。

替换后:

  根据比较,新旧sdk只有上述变化,替换后command+B编译无错误提示。应该没事。

三、连连支付

按照连连支付官方文档

最新的sdk包是支持ipv6的,可是旧包也是支持的。项目中用的是2.4.0,官网上最新包是2.4.7,最后咱们作了替换。

替换后报错了:

缘由是在新的sdk包里将报错的这两个方法合成了一个。

  在新的方法里面添加了一个判断支付类型的参数。

  根据项目中报错的两个地方,第一个是快捷支付,第二个是认证支付。按照以前的进行了修改。command+B编译无错误提示。应该没事。

  可是实际上仍是遇到了崩溃的bug。而后咱们换回了2.4.0版本,应为连连支付官网上说以前的版本也支持ipv6,咱们以前的版本没有问题,因此换了回来,看看上线能成功不。

四、友盟

  按照友盟官方sdk文档描述,须要更换新的sdk包。

按照须要,勾选了以下:

  OMG,搞错了,项目里面的友盟是友盟分析,上边那个是友盟分享。。。

  可是根据官方文档,好像咱们的不用替换,由于涉及到什么IDFA,咱们项目好像不涉及这个。

五、微信

  按照微信最新sdk包1.7版本里面的README.txt,最新的sdk包支持ipv6

  而咱们项目中的微信是1.5版本的。应该进行替换。command+B编译无错误提示。应该没事。

  比较好笑的是微信的sdk包是支持ipv6的,可是微信自己并不支持ipv6,因此说,即使你替换了最新的sdk包,在ipv6网络下仍是不能用微信分享,由于你的app应用在ipv6网络环境下调不起微信,也就分享不了了,这个问题微信应该意识到了,估计后边的版本应该也是支持ipv6的吧。

六、QQ

官方文档好像也没有说ipv6的事啊

七、支付宝sdk支持了ipv6!!!

  但是下载的时候老是打不开.zip的压缩包。。。叫别人帮忙下载了一份

  command+B编译无错误提示。应该没事。

八、百度地图

根据比较,新的sdk包没有了bundle文件。须要将旧包的bundle文件拷贝进来。

各个sdk下载地址:

reachability

新浪微博

连连支付

友盟统计分析

微信

QQ

支付宝

百度地图

  总之,对于ipv6_Only的处理就是这样办的,从两大方面进行本身审核:自身网络请求和三方涉及网络请求。

关于AFNetworking是否支持ipv-6,有网友如是说:

可见,AFNetworking是支持ipv-6的。可是,关于支持ipv6的afn版本有以下说明:

  另外有网友遇到这样一个问题:这里还遇到一个坑,内网的访问下是不可能链接到本身的服务器,后面测试一下公网阿里云的服务器,可以正常链接,这个多是DNS64在搜索ipv6的过程当中,并无搜索内网的网络,致使内网链接失败(这里卡了半天, 切记)(这个问题笔者并无遇到,也没有亲测,你们注意一下这个问题,若是遇到了,知道是怎么回事。)

  最后,有的网友上线被拒了,多是由于app的服务器端没有支持ipv6,就此问题,我咨询了咱们的技术经理,技术经理说“后台(即服务器)是要作ipv6的支持工做的”。可是具体是谁管,具体怎么操做的我就不得而知了,这里你们注意一下吧:不只仅是客户端这边支持ipv6,上线以前最好问一下后台端是否是作了相应的ipv6的支持。

  这里关于本身的服务器是否支持ipv6,有网友提供了一个方法,你们能够试一下。(谢谢杭州-托儿索被拒6次的ipv6,争得托儿索的赞成,进行转发)

前两条说的就是咱们的方案:项目里面涉及和网络有关的进行一一排查

第三条是在本身电脑上判断是否服务器支持ipv6的。亲测,在终端获得下图:

  按照托儿索的说法,上图的位置那里显示NOERROR说明服务器没有问题,也是支持ipv6的。若是有错的话,能够按照下边提供的表格进行对照。

  再看托儿所的结论,咱们会获得下边的结论,涉及支持ipv6的实际上是包括三个方面的:

一、项目里面涉及和网络有关的网络请求是否支持ipv6。

二、项目里面涉及和网络有关的sdk是否支持ipv6。

三、项目的服务器是否支持ipv6。

最后,说一下关于托儿索的命令行:终端  dig +nocmd + nostats 你的域名 AAAA,我在网上查了一下发现有这么个命令行:

为了方便复制:digwww.isc.orgAAAA +short 

  获得的结果直接就是一个ipv6格式的,不知道不支持ipv6服务器的是否是打印出来的是否是ip地址(有待验证)。若是谁验证了,但愿告知我一声。在此谢谢了。因此也能够用这个命令行侧面验证服务器是否支持ipv6。

 

参考文章:

http://www.jianshu.com/p/97b205933c15

相关文章
相关标签/搜索