V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
ntop
V2EX  ›  iDev

苹果审核 ipv6 的问题

  •  
  •   ntop · 2021-07-18 17:58:46 +08:00 · 8334 次点击
    这是一个创建于 1218 天前的主题,其中的信息可能已经有所发展或是发生改变。

    苹果小白,刚刚把公司的应用写完了,准备上架,哪知道第一天就被苹果拒绝了,理由是「 App 功能不完善,登录不了账户」,还给了一张登录时候提示网络错误的截图。我自己测试了下,是可以正常登录的。后来有在网上搜索下,发现是因为 iPv6 的原因,苹果会在 ipv6-only 的环境下测试(而我们的服务器是不支持 ipv6 的)。在网上搜了一圈,看到一篇觉得应该靠谱的文章: https://developer.aliyun.com/article/641639 应该是出自阿里云的官方。

    想问下大家,大家都是怎么解决 ipv6 的问题的,我用的是阿里云的 ECS,上面的链接的解决方案是不是靠谱,一般选择其中的方案 1 还是方案 2 ?或者还有其它简单的解决方案适合我这种小白使用。

    这两天一直在研究这个问题,真的太痛苦了,不太懂这种底层网络的问题。。。o(╥﹏╥)o

    第 1 条附言  ·  2021-07-21 10:23:40 +08:00
    现在审核通过了,我总结下问题原因和处理办法。

    原因:苹果给的反馈是测试时发生网络错误,我查了服务器发现服务器有收到请求。最开始我在网上搜有很多文章(大部分来自阿里云)说是 ipv6 的问题,看来这是误导。昨天我 vpn 环境开始复现这个错误,发现握手错误:HandshakeException: Connection terminated during handshake 。所以可以肯定的是从苹果总部访问国内的服务器是不顺畅的。

    方案:
    我查了好多文章,也结合本贴热心网友的回复总结下:
    1. 如果只在中国使用,务必把销售范围改成中国
    2. 在备注中,备注自己的服务器在中国
    3. 可以部署海外的节点(这个目前我还没有做,但是以后大概会做)

    目前我只采用了 1 、2 的方法今天早上的时候测试就通过了,到底是不是因为 1 、2 的改动才通过的,我也有个疑问。据说是如果改成 1 、2 可能会安排其它地方(比如亚洲区或中国区)的审核团队来审核。

    部署海外节点应该是长久之策,我打算以后有时间了就把这事做了。
    第 2 条附言  ·  2021-07-21 10:26:30 +08:00
    另外哦,测试从海外访问国内的时候,可能大部分时间段都是好的只有部分时间段是坏的,比如我们这个服务器,我用 vpn 还有各种测试软件多次测试海外访问情况都是正常的,只是网络慢一点。但是昨天晚 8 点的时候,就不断的出现握手错误,这个大家要小心。
    52 条回复    2021-07-20 20:10:10 +08:00
    Mitt
        1
    Mitt  
       2021-07-18 18:19:52 +08:00   ❤️ 1
    跟 ipv6 无关,现在没有强制 ipv6 支持,我们公司的 APP 都是 ipv4 only 的,苹果审核用的是公司网络,是美国 IP,你或许要检查一下海外访问的情况
    hslx111
        2
    hslx111  
       2021-07-18 18:20:20 +08:00
    文章里的方法还是靠谱的,毕竟阿里搞 IPv6 已经好几年了。然后选择哪个方案,文章里已经说明了适用场景,选择适合自己的就好。
    ntop
        3
    ntop  
    OP
       2021-07-18 18:40:15 +08:00
    @Mitt 我开 vpn 使用美国的 ip 访问也是正常的,想问下贵司的服务器是否部署了海外节点,因为我们是国内的 app 用的也是阿里云的服务器。使用美国的 vpn 节点访问只是速度慢点,但是网络还是正常的。
    mringg
        4
    mringg  
       2021-07-18 19:13:16 +08:00
    确实跟 ipv6 没有关系,解决问题的方向有点错了
    mringg
        5
    mringg  
       2021-07-18 19:15:26 +08:00
    #4 说的有点不严谨,没有 ipv6 网络一样可以上架。可以再搜搜,这块改程序就好。
    Jirajine
        6
    Jirajine  
       2021-07-18 19:26:57 +08:00 via Android
    不是说强制要求必须能在纯 ipv6 网络下运行么。本地可以用 nat46 模拟。
    ntop
        7
    ntop  
    OP
       2021-07-18 19:34:29 +08:00 via iPhone
    @mringg 从原理上来说没有 ipv6 也是可以上架的,我链接的那篇文章也强调了这点。但是问题在于走 nat64 网络的时候会发生意想不到的结果,这个问题更难解决呀,如果有的话希望可以提供下方案。我们 App 本身没有使用 ipv4 的相关 api 的本身支持 ipv6,可以排除 app 自身的原因。
    Zhuzhuchenyan
        8
    Zhuzhuchenyan  
       2021-07-18 20:08:37 +08:00
    就算不用 ipv6 负载均衡实例和地址转换服务也是可以解决的,毕竟能省一点是一点
    既然是 ecs,大部分 ecs 实例天然支持 ipv6 的,然后直接用 ecs 的 ipv6 地址做 AAAA 解析就好。如果不想暴露 ipv6 地址在审核通过后取消掉 AAAA 解析就好(谨慎使用)。
    现代 web 框架的网络层应该是都支持双栈 tcp 协议的,所以理论上解析做完了以后没有代码要改,还是很方便的。
    Mitt
        9
    Mitt  
       2021-07-18 21:20:44 +08:00
    @ntop #3 没有部署海外节点,是腾讯云的服务器,也没有上 CDN,如果你本地没办法复现的话,也许你可以试试沟通一下说明本地使用是正常的,让对方再试一次,或者你再提交一个版本审核,然后网络报错的时候可以输出多一点信息来辅助确认问题,比如域名解析错误,IP 访问错误,或者是 https 证书错误也都是有可能的
    mytsing520
        10
    mytsing520  
       2021-07-18 21:56:48 +08:00
    你就简单点支持 IPv4+IPv6 双栈网络就行了
    crystom
        11
    crystom  
       2021-07-18 22:00:35 +08:00
    用 mac 的热点分享功能就可以模拟这种环境,服务器不需要支持 v6
    mringg
        12
    mringg  
       2021-07-18 22:01:27 +08:00
    检查下调用接口是不是直接用的 ip 地址,有可能是这个原因。


    自 2016 年 6 月 1 日起,提交至 App Store 的所有 app 都必须支持纯 IPv6 网络。由于 NSURLSession 和 CFNetwork API 都已支持 IPv6,大多数 app 不需要进行任何修改。
    """"但如果您的 app 使用的是 IPv4 专用的 API 或硬编码的 IP 地址,则需要进行修改。""""
    在将 app 提交至 App Store 进行审核之前,请务必测试 IPv6 兼容性。
    https://developer.apple.com/cn/support/ipv6/
    v2tudnew
        13
    v2tudnew  
       2021-07-18 22:17:02 +08:00
    挺搞笑的,苹果自家 N 多域名到现在都没有 AAAA 解析。
    daimaosix
        14
    daimaosix  
       2021-07-18 22:23:52 +08:00
    @v2tudnew 因为大多 CDN 本身支持 IPv4 转换到 IPv6
    daimaosix
        15
    daimaosix  
       2021-07-18 22:24:47 +08:00
    上个 CDN 吧楼主,大多数 CDN 都支持 IPv6 访问,你不用做什么改造。
    azuis
        16
    azuis  
       2021-07-18 22:28:09 +08:00
    并不需要 IPv6 网站,只要你的 App 里面没有硬编码 IP 地址就可以正常连接的。
    ntop
        17
    ntop  
    OP
       2021-07-18 22:51:19 +08:00
    爬了一个 V2EX 的老帖子,我看楼主也没有采取什么措施,最后是让苹果审核那边多试几次。另外一个方案是部署海外节点。。。现在越看越闹心了。。问题越来越不清楚了。。原贴: https://www.v2ex.com/t/357223#reply47
    ntop
        18
    ntop  
    OP
       2021-07-18 22:53:44 +08:00
    @azuis 没有硬编码呢,而且我在服务器日志上查到了苹果那边测试时候的日志,日志还是成功的。真不明白到底哪里出了问题。
    ntop
        19
    ntop  
    OP
       2021-07-18 23:13:27 +08:00
    @daimaosix 好的,谢谢。不知道 CDN 贵不贵我没有搞过这个。
    tsening
        20
    tsening  
       2021-07-18 23:14:24 +08:00
    如果是网络问题的话开启一下阿里云的全站加速好了,大不了审核完了关掉?
    azuis
        21
    azuis  
       2021-07-19 00:01:18 +08:00
    @ntop 你确认没有硬编码的话就再提交让他们多试试就好了, 可能你那个服务器海外访问比较慢。
    ruixue
        22
    ruixue  
       2021-07-19 00:10:51 +08:00   ❤️ 2
    从本月 8 日开始,电信 163 网出口频频被重置连接。有网友称在 12 日重置现象好转,开始恢复到正常水平,而 14 日重置频率再度提升

    亦有网友通过网络探针日志表明,这一现象实际未见显著好转,经常捕获到 Connection Reset 状态

    海外回国访问用户受此影响较大,此外它还严重干扰到了跨境 API 调用需求的用户

    ——有可能不是 ipv6 的问题,而是最近 163 出口随机劣化跨境流量的锅,参考 /t/788719

    可以试试部署海外 CDN
    wang93wei
        23
    wang93wei  
       2021-07-19 00:12:02 +08:00
    如果你的应用只在中国使用,请把发布的国家设置为中国,就不会遇到 IPV6 的限制了。我们都是这么做的。
    exploreexe
        24
    exploreexe  
       2021-07-19 00:24:20 +08:00
    其实啥都不用改,再次提交一下,说修复了,估计就能过。
    问题出在苹果的网络有问题。
    另外还有一点就是垃圾苹果审核不想干活,随便找个理由拒绝你。

    一看就是刚接触 iOS 的开发者,老弟,你这只是刚开始,后面苹果审核会更加折磨你的。
    ajaxfunction
        25
    ajaxfunction  
       2021-07-19 00:29:59 +08:00
    我估计是没有网络重连功能,苹果 app 第一次下载,没点授权同意使用 wifi 或数据流量的时候,app 是断网的,
    如果 app 已经启动了,才点同意使用网络,那么 app 就是无网络状态。 重启才能恢复正常
    cz5424
        26
    cz5424  
       2021-07-19 00:47:31 +08:00 via iPhone
    CDN 套一层,全球加速,前一个月写的一次过(之前从没写过 IOS )
    Leonard
        27
    Leonard  
       2021-07-19 09:15:19 +08:00
    多提交几次,我有时候同样的代码一字未改,第一次被拒第二次就过了。苹果审核人为因素占比很大。
    salmon5
        28
    salmon5  
       2021-07-19 10:14:20 +08:00
    你的理解时有问题的,二次加工过的理解来提问,确实小白;
    是你的 app 代码要适配 ipv6,和服务端网络没有任何卵关系
    salmon5
        29
    salmon5  
       2021-07-19 10:16:53 +08:00
    苹果的审核员办公网出口有 NAT64,能访问 ipv4 的服务器;是你的 app 代码要适配 ipv6 only 下能工作;
    dier
        30
    dier  
       2021-07-19 10:30:41 +08:00
    这个问题我遇到过,也解决过,原因就是苹果审核人员的网络访问不到你们服务器导致的。
    我当时的解决方案就是在海外开个 VPS,部署一个反代把海外的访问请求解释到 VPS 的 IP 就行了,另外海外 VPS 一般也都支持 IPv6 可以一并用上。这个方法适合没有海外用户的,不然这个 VPS 会成为海外用户访问的瓶颈。
    如果有海外用户,建议就用 CDN
    docx
        31
    docx  
       2021-07-19 10:31:41 +08:00
    说个题外话,链接文章并非来自阿里云官方,只是入驻的自媒体文章
    bobzhangyong
        32
    bobzhangyong  
       2021-07-19 10:44:46 +08:00
    1. 仔细看一下苹果的拒绝理由,如果是 ipv6 问题会明确说明是 ipv6 的
    2. 苹果的 ipv6 也不是要求你的后端有 ipv6 支持, 它有一套转换机制,本质上要求用户再一个纯 ipv6 环境中可以正常访问, 通过 dns 6to4 转换, 它需要你 ios 的网络库 支持,你要检查你的网络库。
    ntop
        33
    ntop  
    OP
       2021-07-19 11:01:47 +08:00
    @azuis 好的,我再提交试试。顺便问一下,在苹果的 App 审核消息中心那里直接回复和后台重新提交有什么区别,苹果的审核都会重新测试吗?
    ntop
        34
    ntop  
    OP
       2021-07-19 11:03:24 +08:00
    @ruixue 我就是这两天提交的审核,可能我中招了😭
    ntop
        35
    ntop  
    OP
       2021-07-19 11:04:11 +08:00
    @wang93wei 谢谢哦,我试试。我现在确实是全球发布的,没有改区域。
    ntop
        36
    ntop  
    OP
       2021-07-19 11:05:08 +08:00
    @exploreexe 😭😭😭
    ntop
        37
    ntop  
    OP
       2021-07-19 11:07:36 +08:00
    @ajaxfunction 还有这种问题吗,我是 iOS 新手。我的错误是在登录页面,点击登录后直接报网络错误。如果重新才能恢复的话,那是不是即使重连也是不行的?
    ntop
        38
    ntop  
    OP
       2021-07-19 11:08:38 +08:00
    @salmon5 我的 APP 已经适配 ipv6 了,这个已经测试过。
    ntop
        39
    ntop  
    OP
       2021-07-19 11:11:30 +08:00
    @dier 谢谢哦,我看大多数成功的解决方案是 1. 重新提交,让苹果再试试 2. 部署海外节点或者做海外加速,后者更主动一些。
    weichengwu
        40
    weichengwu  
       2021-07-19 11:13:47 +08:00
    先检测下海外访问状况 http://ping.pe
    ntop
        41
    ntop  
    OP
       2021-07-19 11:14:05 +08:00
    @salmon5 亲哦,你都不看楼吗,APP 适配问题我不是已经说过了吗,而且请求都发到服务器了。硬编码的也能把请求发过来吗,我不懂。。。
    huZhao
        42
    huZhao  
       2021-07-19 11:24:38 +08:00
    录制视频,上传后端申诉,一般就过审核了。
    jwautumn
        43
    jwautumn  
       2021-07-19 11:26:24 +08:00
    上架过很多 APP 。遇到这种情况的次数也挺多的。
    大多数解决方案都是重新提交审核,就可以了。还没过就多提交几次。反正现在审核很快,半天一天的。
    个人感觉是苹果的审核团队在的地区问题,被分配到了无法访问的地区,导致的无法打开。
    所以我一般都备注一下,让分配在可以访问国内网的地区审核团队。虽然并没有卵用~~~
    ntop
        44
    ntop  
    OP
       2021-07-19 11:36:47 +08:00
    @mrrenjw 谢谢,我也争取多审核几次
    ntop
        45
    ntop  
    OP
       2021-07-19 11:39:00 +08:00
    @huZhao 好的,我试试。
    @weichengwu 我测试了下我们网站没啥问题。这个网站不错挺有用的,收藏了。
    Lemeng
        46
    Lemeng  
       2021-07-19 13:30:32 +08:00
    也有可能习惯性拒绝。应该没问题吧
    GDAOE
        47
    GDAOE  
       2021-07-19 14:14:27 +08:00   ❤️ 1
    发布地点修改成中国大陆,就不会要求 IPV6
    可以看看提审需要注意的问题:
    https://github.com/gdxz123/AppleGuidelines
    xiaooloong
        48
    xiaooloong  
       2021-07-19 16:43:04 +08:00   ❤️ 2
    之前我们也遇到过,其实跟 ipv6 无关,就是苹果审核那边的网络访问不到你的服务器。当时我们的服务跑在腾讯云,苹果审核死活访问不通,于是买了一台国外 vps 做反向代理转发到腾讯云就好了。
    Alvin109
        49
    Alvin109  
       2021-07-19 17:31:03 +08:00
    原来是这样
    @ntop
    ntop
        50
    ntop  
    OP
       2021-07-20 13:31:09 +08:00
    @xiaooloong 能分享下实现细节吗,我不太明白部署 vps 之后的操作,是需要在手机 APP 里面判断当前的地址位置如果是在苹果那边就访问 vps 的地址,如果不是就访问正常的地址吗?还是 APP 不需要做任何更新,地址在路由解析的时候就会自动按照就近原则访问了国外的 vps
    xiaooloong
        51
    xiaooloong  
       2021-07-20 13:53:51 +08:00
    @ntop 国外 vps 上用 nginx 做 4 层或者 7 层转发到国内。dns 域名,国外解析到国外的 vps,国内不变。

    顺便一提,苹果的测试环境应该是用 macOS 的互联网共享开出来的 NAT64 网络。就是实际互联网是纯 ipv4 的,但是开出来的 Wi-Fi 是纯 ipv6,在 macOS 这层网关做的 DNS64 和 NAT64 。
    之前我们的 app 除了我们自己的服务器还接了第三方的统计 sdk,结果第三方统计都收到请求来自国外的 iPad 用户的使用数据了,结果反而我们自己的域名接口苹果那边访问不通。不知道是腾讯云的网有问题还是苹果的网有问题。
    ntop
        52
    ntop  
    OP
       2021-07-20 20:10:10 +08:00
    @xiaooloong 我刚刚竟然复现了这个错误,而且 100%复现。在本地环境用 wifi 网络开 vpn 。直接报错, log 中打印:HandshakeException: Connection terminated during handshake,关掉 vpn 一起正常。
    哎,你看这个错误。。。大概是上面又有动作了。
    平时我测试都是白天测试的,开 vpn 也没问题,今天测试的时间为晚上 8 点左右对面正好刚起床。。 看来我要把 vps 部署起来了,真坑哦。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 06:34 · PVG 14:34 · LAX 22:34 · JFK 01:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.