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 · 136 天前 · 5279 次点击
    这是一个创建于 136 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  134 天前
    现在审核通过了,我总结下问题原因和处理办法。

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

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

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

    部署海外节点应该是长久之策,我打算以后有时间了就把这事做了。
    第 2 条附言  ·  134 天前
    另外哦,测试从海外访问国内的时候,可能大部分时间段都是好的只有部分时间段是坏的,比如我们这个服务器,我用 vpn 还有各种测试软件多次测试海外访问情况都是正常的,只是网络慢一点。但是昨天晚 8 点的时候,就不断的出现握手错误,这个大家要小心。
    52 条回复    2021-07-20 20:10:10 +08:00
    Mitt
        1
    Mitt  
       136 天前   ❤️ 1
    跟 ipv6 无关,现在没有强制 ipv6 支持,我们公司的 APP 都是 ipv4 only 的,苹果审核用的是公司网络,是美国 IP,你或许要检查一下海外访问的情况
    hslx111
        2
    hslx111  
       136 天前
    文章里的方法还是靠谱的,毕竟阿里搞 IPv6 已经好几年了。然后选择哪个方案,文章里已经说明了适用场景,选择适合自己的就好。
    ntop
        3
    ntop  
    OP
       136 天前
    @Mitt 我开 vpn 使用美国的 ip 访问也是正常的,想问下贵司的服务器是否部署了海外节点,因为我们是国内的 app 用的也是阿里云的服务器。使用美国的 vpn 节点访问只是速度慢点,但是网络还是正常的。
    mringg
        4
    mringg  
       136 天前
    确实跟 ipv6 没有关系,解决问题的方向有点错了
    mringg
        5
    mringg  
       136 天前
    #4 说的有点不严谨,没有 ipv6 网络一样可以上架。可以再搜搜,这块改程序就好。
    Jirajine
        6
    Jirajine  
       136 天前 via Android
    不是说强制要求必须能在纯 ipv6 网络下运行么。本地可以用 nat46 模拟。
    ntop
        7
    ntop  
    OP
       136 天前 via iPhone
    @mringg 从原理上来说没有 ipv6 也是可以上架的,我链接的那篇文章也强调了这点。但是问题在于走 nat64 网络的时候会发生意想不到的结果,这个问题更难解决呀,如果有的话希望可以提供下方案。我们 App 本身没有使用 ipv4 的相关 api 的本身支持 ipv6,可以排除 app 自身的原因。
    Zhuzhuchenyan
        8
    Zhuzhuchenyan  
       136 天前
    就算不用 ipv6 负载均衡实例和地址转换服务也是可以解决的,毕竟能省一点是一点
    既然是 ecs,大部分 ecs 实例天然支持 ipv6 的,然后直接用 ecs 的 ipv6 地址做 AAAA 解析就好。如果不想暴露 ipv6 地址在审核通过后取消掉 AAAA 解析就好(谨慎使用)。
    现代 web 框架的网络层应该是都支持双栈 tcp 协议的,所以理论上解析做完了以后没有代码要改,还是很方便的。
    Mitt
        9
    Mitt  
       136 天前
    @ntop #3 没有部署海外节点,是腾讯云的服务器,也没有上 CDN,如果你本地没办法复现的话,也许你可以试试沟通一下说明本地使用是正常的,让对方再试一次,或者你再提交一个版本审核,然后网络报错的时候可以输出多一点信息来辅助确认问题,比如域名解析错误,IP 访问错误,或者是 https 证书错误也都是有可能的
    mytsing520
        10
    mytsing520  
       136 天前
    你就简单点支持 IPv4+IPv6 双栈网络就行了
    crystom
        11
    crystom  
       136 天前
    用 mac 的热点分享功能就可以模拟这种环境,服务器不需要支持 v6
    mringg
        12
    mringg  
       136 天前
    检查下调用接口是不是直接用的 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  
       136 天前
    挺搞笑的,苹果自家 N 多域名到现在都没有 AAAA 解析。
    daimaosix
        14
    daimaosix  
       136 天前
    @v2tudnew 因为大多 CDN 本身支持 IPv4 转换到 IPv6
    daimaosix
        15
    daimaosix  
       136 天前
    上个 CDN 吧楼主,大多数 CDN 都支持 IPv6 访问,你不用做什么改造。
    azuis
        16
    azuis  
       136 天前
    并不需要 IPv6 网站,只要你的 App 里面没有硬编码 IP 地址就可以正常连接的。
    ntop
        17
    ntop  
    OP
       136 天前
    爬了一个 V2EX 的老帖子,我看楼主也没有采取什么措施,最后是让苹果审核那边多试几次。另外一个方案是部署海外节点。。。现在越看越闹心了。。问题越来越不清楚了。。原贴: https://www.v2ex.com/t/357223#reply47
    ntop
        18
    ntop  
    OP
       136 天前
    @azuis 没有硬编码呢,而且我在服务器日志上查到了苹果那边测试时候的日志,日志还是成功的。真不明白到底哪里出了问题。
    ntop
        19
    ntop  
    OP
       136 天前
    @daimaosix 好的,谢谢。不知道 CDN 贵不贵我没有搞过这个。
    tsening
        20
    tsening  
       136 天前
    如果是网络问题的话开启一下阿里云的全站加速好了,大不了审核完了关掉?
    azuis
        21
    azuis  
       136 天前
    @ntop 你确认没有硬编码的话就再提交让他们多试试就好了, 可能你那个服务器海外访问比较慢。
    ruixue
        22
    ruixue  
       136 天前   ❤️ 2
    从本月 8 日开始,电信 163 网出口频频被重置连接。有网友称在 12 日重置现象好转,开始恢复到正常水平,而 14 日重置频率再度提升

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

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

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

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

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

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