关于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是什么,怎么建立测试环境,,,可是没有看到具体的操作和解决的方案,这里,为大家提供一种方案,希望给大家带来帮助吧。

总的来说有三个方面需要进行检查和修改:

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

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

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

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的地址返回给客户端。如图所示:

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

本地 Mac 搭建 IPv6 测试环境

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

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

  如何判断自己的项目里面是否是ipv6、ipv4呢,我们用的方法,就是自己项目里面涉及和网络有关的进行一一排查

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

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

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

  这种方案需要验证,估计需要几天的时间才能知道上线是否被拒。如果侥幸上线了,我会第一时间在本文里面续写一下。如果被拒,我也会第一时间排查原因,进行本文的更新。谢谢大家的支持。

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

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

1、Reachability

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

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

原因如下介绍:

#pragma mark reachabilityForLocalWiFi

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

//+ (instancetype)reachabilityForLocalWiFi;

2、新浪微博

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

替换后:

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

3、连连支付

按照连连支付官方文档

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

替换后报错了:

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

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

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

  但是实际上还是遇到了崩溃的bug。然后我们换回了2.4.0版本,应为连连支付官网上说之前的版本也支持ipv6,我们之前的版本没有问题,所以换了回来,看看上线能成功不。

4、友盟

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

按照需要,勾选了如下:

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

  但是根据官方文档,好像我们的不用替换,因为涉及到什么IDFA,我们项目好像不涉及这个。

5、微信

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

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

  比较可笑的是微信的sdk包是支持ipv6的,但是微信本身并不支持ipv6,所以说,即便你替换了最新的sdk包,在ipv6网络下还是不能用微信分享,因为你的app应用在ipv6网络环境下调不起微信,也就分享不了了,这个问题微信应该意识到了,估计后边的版本应该也是支持ipv6的吧。

6、QQ

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

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

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

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

8、百度地图

根据比较,新的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的其实是包括三个方面的:

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

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

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

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

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

  得到的结果直接就是一个ipv6格式的,不知道不支持ipv6服务器的是不是打印出来的是不是ip地址(有待验证)。如果谁验证了,希望告知我一声。在此谢谢了。所以也可以用这个命令行侧面验证服务器是否支持ipv6。

参考文章:

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

时间: 2024-08-27 23:15:22

关于IPv6的相关文章

如何在Linux下禁用IPv6

如何在Linux下禁用IPv6 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6                            禁用IPv6(包括回环接口) echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6                     禁用IPv6(默认) vim /etc/sysctl.conf                                    

Centos 7下IPV6 有状态DHCPV6配置

yum源安装kea yum install epel-release yum install kea DEMON ps aux| grep kea rpm -qa kea 查看dhcpv6默认配置 cat /etc/kea/kea.conf 启动kea-dhcpv6并查看kea启动过程 systemctl start kea-dhcp6 systemctl status kea-dhcp6 systemctl -l status kea-dhcp6 通过tcpdump查看服务器数据包交互过程 t

ipv6加英文的中括号访问

加英文的中括号就可以,如[2001:4998:c:e33::1004],我发现这是yahoo首页.但并不是所有IPv6网站都可以通过IPv6地址访问,跟IPv4一样,网站服务器端可以只绑定域名,不接受只有IPv6地址的请求.例如,你可以通过http://iptv.bupt.edu.cn访问纯IPv6的北邮IPTV,ping这个域名可以得到2001:da8:215:4010:250:56ff:fe87:61ec,你访问[2001:da8:215:4010:250:56ff:fe87:61ec]却只

linux系统管理之服务管理,ipv6,tcp_wrappers练习

服务管理 ipv6 tcp_wrappers

利用IPv6 Tunnel实现IPV6网站发布解决IOS审核的问题

1.打开https://tunnelbroker.net/,选注册 填写注册信息,如下图所示: 登录上图注册的邮箱,会收到一封注册的邮件,打开邮件中的链接,实现用户的注册: 用所创建的帐号登录,选择"Create Regular Tunnel", 在下图中输入本端遂道的地址,选择香港的服务器,选"Create Tunnel" 查看已经创建的遂道,先选"Transit",再选"Free IPv6 Tunnel",就可以显示已经创

针对苹果iOS最新审核要求为应用兼容IPv6

最新消息 今天苹果推出重磅消息,6月1日后所有应用必须支持IPv6-only网络!!!当iOS开发者看到这个消息的第一反应可能就是IPv6是个什么鬼!!其实IPv6早在很早之前就已经推出,而且苹果在2015年的开发者大会上就已经提出苹果将力挺IPv6 官网链接 IPv6-only 说了这么多,IPv6到底是个什么鬼!我们来看看百度百科是怎么解释的: 我们再来看看官方给出的IPv6与IPv4的对比: 看不懂??,我们来解释下: 1.IPv6:避免了网络地址转换(NAT) 2.通过网络通过使用简化的

windows网站配置ipv6

一.概览 IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,IPv6和IPv4的兼容性并不好,难以互联互通,双方通信往往需要经过隧道 二.实施 2.1.本文以Windows 2012 R2为例(需要服务器为经典网络) 2.2.首先为服务器建立IPv6隧道,需要先注册HE,注册地址https://tunnelbroker.net/tunnel_detail.php?tid=381297

request.getRemoteAddr()取得的是IPv6的地址格式解决方法

1:在使用request.getRemoteAddr()取得客户端的IP地址时,得到的却是IPv6的地址格式0:0:0:0:0:0:0:1,而不是IPv4的地址格式127.0.0.1的原因? 因为机器上启用的IPv6协议,所以在对localhost进DNS解析时,得到的是IPv6形式的本机地址0:0:0:0:0:0:0:1. 实际上这种情况只有在服务器和客户端在同一台机器上用localhost访问时才会出现. 2:解决方法 (1)使用127.0.0.1代替localhost进行访问 把地址格式写

iOS应用支持IPV6

说了好久  ipv6, 擦, 似乎没遇到过呢 再次来 写下 同事们遇到的问题 一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,并且仍然可以通过此网络去获取IPV4地址提供的内容.客户端向服务器端请求域名解析,首先通过DNS64

IPv6&网络桥接&Bonding&Teaming

[IPV6] IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为"互联网协议". IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为全世界的每一粒沙子编上一个网址. 16进制表示,长度为2^128位,前缀48位,后缀80位: 表示方法: 1.冒分十六进制表示法 0000-FFFF:0000-FFFF:0