网上好多关于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下载地址:
总之,对于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