美文网首页iOS开发常用iOS_小蟹专题iOS小超人
Ipv6_Only 简单的理解(已验证,项目已经上线)

Ipv6_Only 简单的理解(已验证,项目已经上线)

作者: 和珏猫 | 来源:发表于2016-06-14 15:09 被阅读13448次

    网上好多关于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包。

    按照需要,勾选了如下:

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

    但是根据官方文档,好像我们的不用替换,因为涉及到什么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。

    6月14号23:30提的包,6月16号白天查到上线了。说明一点:这样处理ipv6的方法是可行的。

    最后,哪里不对的地方可以给我留言,我会及时改进的,谢谢大家。

    相关文章

      网友评论

      • lemo_l:美国审核跟北京时间有时差,如果服务端有验证可能不能通过
      • 好长的名字:你好楼主,App被拒。原因We discovered one or more bugs in your app when reviewed on iPad Air 2 running iOS 11.4 on Wi-Fi connected to an IPv6 network.

        Specifically, an error message was displayed when we attempted to sign in with the provided demo account.

        Please see attached screenshot for details.
        是什么原因,:pray:
      • Aacmr:楼主,app被拒。显示如下:We discovered one or more bugs in your app when reviewed on iPad and iPhone running iOS 11.1.1 on Wi-Fi connected to an IPv6 network.

        It displayed an error when we were trying to log into the app.

        Please see attached screenshots for details. 用IPv6网测试的登录正常,但是审核不过。 服务器也是NOError. 我就是想问一下,项目中的所有sdk都要兼容IPv6吗? 是不是任何一个不兼容,就不通过?
      • 7f3ce35e5d56:你好,能请教你下吗? 请问,你是怎么确定客户端支持ipv6的呢?我按照苹果提供的方法搭建了ipv6环境,AFNetworking使用的是最新版本,做数据请求的时候一直返回“未能找到指定主机的服务器”,这是客户端的问题还是服务器端对问题啊?懵圈。。。另外,我也测试了服务器对ipv6的支持,使用(dig ....AAAA)测试返回的status 是NOERROR,使用ipv6-test.com测试时,返回的是没有AAAA记录,更懵了。。。最后,我测试了下你提供的最后一个方法(dig 域名 AAAA +short),我们的服务器直接返回了,啥都没有。 额, 说了这么多,我只是想问下, 如果ipv6下,客户端返回 “未能找到指定主机的服务器”,能说明客户端没问题吗? 或者能说明是服务器端的问题吗? 现在整个人都懵😳的。。。或者你们有遇到类似的情况吗?希望能得到你的帮助,谢谢先~~!
      • 童话镇里蜿蜒的河:楼主你好。 我现在遇到了点问题。 我想问问你,当时 你们的APP 不支持ipv6,但是在ipv6的环境下运行,会报什么错误呢? 能不能分享给我 ,我现在去排除一下 我们是否遇到了相同的问题。
        和珏猫:@童话镇里蜿蜒的河 哦哦,我们自己好像没有配备ipv6环境测试。
      • 0409c0c67a8d:楼主好,我的APP是原生搭壳,没有任何第三方库的应用,内容接的web,本地测试都正常,在本地搭建ipv6环境也正常,服务器也按你的方法测了也没问题,但依然因为ipv6被拒,被拒好几次了,不知道楼主有木有办法,麻烦帮忙解答一下。
        一一闪闪亮京京:你们是如何通过审核的啊?
      • justTusang:请教楼主 我的项目使用的是asi的请求框架,reachability已经更新,然后使用6box的中转服务,配置完4A地址之后一开始在9.3.2版本是能够上架成功的,但是在10月份之后就不行了。请问asi真的不适配ipv6吗?楼主使用asi框架的app现在还能够成功上架吗?
        和珏猫:@justTusang 早点更换了吧,asi早就不更新了,
        justTusang:@和珏猫 好的,谢谢啦
        和珏猫:@justTusang 我们更换成afn了
      • cbb9e3ec600d:我在本地搭建的IPv6测试环境下能正常使用,用你的方法测试了下服务器也没问题status:NOERROR .结果还是被拒(IPv6)
        cbb9e3ec600d:@Caiflower 请求地址是域名还是IP?
        Caiflower:测试服务没问题status:NOERROR ,但是发请求一直请求超时是什么情况呀
        0409c0c67a8d:@Addict_dong 通过审核了吗
      • 38ecbde68ec8:因为是webserviece,所以用的ASI,因为ipv6被拒三次了,求大神指导,qq652354218
        动动鞋:@和珏猫 我想请教下,用 jQuery.ajax jsonp 网络请求,要怎么对应?都没有用到上面说的API
        和珏猫:@动动鞋 不是,有一部分是cordova,不过最近都换成原生的了
        动动鞋:@Z先森的花小喵 请问你的app是基于Cordova的webapp吗?
      • e5b67824629b:我想问一下 楼主服务端ipv6的支持是怎么处理的呢?掏钱买服务?走阿里云什么的云服务?
        和珏猫:@卟幺要 我们公司好像有自己的服务器(公司规模还算可以),所以我们没有管后台服务器的事,据说是运营协调的。。。关于更多服务器的事,可以加群,567577940被拒群,里面各种大神
      • 00069c70b552:楼主,我在维护别人的APP,现在上传被拒了,以前用的是MKNetworkKit,我问原本的开发人员需不需要换AFNet,他说不用,只需要改代码,今天刚刚上传新的版本,请问MKNetworkKit究竟支不支持ipv6?百度了很多帖子都没有明确的答案
        427054c080e0:用MKNetworkKit 上线成功了么
        和珏猫:@D黄大炜 凌晨十二点半,你也是够努力的!祝你好运!
        和珏猫:@D黄大炜 http://www.open-open.com/lib/view/open1427092877793.html
        你先打开上边的链接,然后接着往下看。
        从苹果官网上我们可以看到这样一句话:using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses,大概意思就是:苹果有说明CFNetwork库是支持IPV6的。
        而前面的链接里面的第一段有这样一句话:MKNetworkKit集 ASIHTTPRequest 和 AFNetworking 两个框架于一体。ASIHTTPRequest 框架是一个用O-C编写,对 CFNetwork API 进行了封装,并且使用简便的一套API。让我们看到貌似MKNetworkKit是支持IPV6的,但是文章后边一段话:但是Ben在2011年9月21日就已经声明停止开发和支持该框架。。。2011年就不更新这个MKNetworkKit了。。。所以慢慢大家也就不用了,所以也就在网上查不到相关它与ipv6的关系了。。。但是即便不更新了,如果是基于CFNetwork,仍然是支持ipv6的。时间在变,核心技术没有变,就像,不管科技如何发展,世间万物都遵循牛顿三大定律。。。
        最后,我觉得是支持的,但还是建议更新成afn,毕竟保险。。。
        另外如果真的支持,并且上线了,烦请告知我一声,谢谢!
      • 9046915093cf:你好,我这边都测试了,没什么问题,但是审核就过不去,可以问你些问题吗?
        1:我们的服务器是不是需要架在大陆外才可以呢,比如架在香港什么的。
        和珏猫:@卡卡卡6 567577940被拒群,里面各种大神
        9046915093cf:我加你qq吧 上面好说点 可以吗
        和珏猫:@卡卡卡6 就架在大陆就可以呀,不是所有公司的服务器都架在国外或者港澳台吧?
      • TRTRtrtr:后台是阿里云服务器,已经给服务器加了ipv6的地址,执行终端命令dig +nocmd + nostats 你的域名 AAAA还是status: SERVFAIL
        鄙人哈哈哈哈5871:@TRTRtrtr 服务端适配的?
        TRTRtrtr:@鄙人哈哈哈哈5871 过了
        鄙人哈哈哈哈5871:@TRTRtrtr 应用过了没?
      • xxxixxxx:先mark:smile:
        和珏猫:@拾荒少年v 希望带来帮助
      • 沐时:楼主 服务器必须支持ipv6吗
        9e290802deb6:@和珏猫 不支持的话可以通过审核那?
        和珏猫:@雨天太阳 最好支持
      • leftwater:666666
      • Young森:你好,我的app被决绝三次,可以问你一下问题吗
        和珏猫:@Young森 可以啊,互相交流学习啊
      • ece82d62b394:大神,我用了乐视的SDK,他们需要有AFN的AFHTTPRequestOperation.h的支持,但是AFN3.0以上的AFHTTPRequestOperation.h已经被废弃了,我问乐视,乐视说老版本的AFN也支持。 还一个问题,测试服务器的是否支持ipv6要用到域名,我没有域名,怎么测试??
        ece82d62b394:@和珏猫 没有域名啊 啊啊 就是ip地址啊 怎么测啊??
        和珏猫:@ece82d62b394 AFHTTPRequestOperation.h已经被废弃了,但是是不是别的能替换了,我想这个afn应该必须是3.0以上版本才支持的,官方上边说了3.0以后的才支持ipv6啊。
        另外关于域名的问题,正式站如果支持ipv6,那么测试站应该也是支持的,不可能作出区分的。还有就是这个域名吧,不是咱们前端涉及的了,应该是你们服务器或者后台那边设置,先按照我上边文章里面说的命令行dig www.isc.orgAAAA +short 在终端上边测试一线你们的服务器是否支持ipv6吧
      • ece82d62b394:大神,我的后台就给了我一个ip地址,作为接口的访问。网上搜了许多,说是要域名访问才可以,到底怎么样才能通过审核呢?后台的接口 怎么整才可以??
        和珏猫:@ece82d62b394 按照说的检验一下自己的服务器是否支持ipv6,主要的就是三点,两点关于客户端的,最后一点就是服务器了。
      • ece82d62b394:大神,我的项目今天被拒的,也是ipv6的原因 我的AFN用的2.x版本,Reality也是以前的版本,支付宝,微信SDK也是老的。是不是按照你的要求,全部换了就可以上线呢?我阿里云的服务器作为后台,没域名 就是个ip地址 也不知道可以不可以。。。
        和珏猫:@ece82d62b394 afn肯定要换3.0或者以上的,sdk涉及到网络有关的也是需要换成支持ipv6的sdk。至于服务器,按照我说的验证一下吧,实在不行问一句后台,后台是否支持ipv6
      • footSInRoad:谢谢了,很详细。。我也是上架遇到了问题。
        和珏猫:@rensheng 客气。希望能给你带来帮助。

      本文标题:Ipv6_Only 简单的理解(已验证,项目已经上线)

      本文链接:https://www.haomeiwen.com/subject/pfrudttx.html