苹果小白,刚刚把公司的应用写完了,准备上架,哪知道第一天就被苹果拒绝了,理由是「 App 功能不完善,登录不了账户」,还给了一张登录时候提示网络错误的截图。我自己测试了下,是可以正常登录的。后来有在网上搜索下,发现是因为 iPv6 的原因,苹果会在 ipv6-only 的环境下测试(而我们的服务器是不支持 ipv6 的)。在网上搜了一圈,看到一篇觉得应该靠谱的文章: https://developer.aliyun.com/article/641639 应该是出自阿里云的官方。
想问下大家,大家都是怎么解决 ipv6 的问题的,我用的是阿里云的 ECS,上面的链接的解决方案是不是靠谱,一般选择其中的方案 1 还是方案 2 ?或者还有其它简单的解决方案适合我这种小白使用。
这两天一直在研究这个问题,真的太痛苦了,不太懂这种底层网络的问题。。。o(╥﹏╥)o
1
Mitt 2021-07-18 18:19:52 +08:00 1
跟 ipv6 无关,现在没有强制 ipv6 支持,我们公司的 APP 都是 ipv4 only 的,苹果审核用的是公司网络,是美国 IP,你或许要检查一下海外访问的情况
|
2
hslx111 2021-07-18 18:20:20 +08:00
文章里的方法还是靠谱的,毕竟阿里搞 IPv6 已经好几年了。然后选择哪个方案,文章里已经说明了适用场景,选择适合自己的就好。
|
3
ntop OP @Mitt 我开 vpn 使用美国的 ip 访问也是正常的,想问下贵司的服务器是否部署了海外节点,因为我们是国内的 app 用的也是阿里云的服务器。使用美国的 vpn 节点访问只是速度慢点,但是网络还是正常的。
|
4
mringg 2021-07-18 19:13:16 +08:00
确实跟 ipv6 没有关系,解决问题的方向有点错了
|
5
mringg 2021-07-18 19:15:26 +08:00
#4 说的有点不严谨,没有 ipv6 网络一样可以上架。可以再搜搜,这块改程序就好。
|
6
Jirajine 2021-07-18 19:26:57 +08:00 via Android
不是说强制要求必须能在纯 ipv6 网络下运行么。本地可以用 nat46 模拟。
|
7
ntop OP @mringg 从原理上来说没有 ipv6 也是可以上架的,我链接的那篇文章也强调了这点。但是问题在于走 nat64 网络的时候会发生意想不到的结果,这个问题更难解决呀,如果有的话希望可以提供下方案。我们 App 本身没有使用 ipv4 的相关 api 的本身支持 ipv6,可以排除 app 自身的原因。
|
8
Zhuzhuchenyan 2021-07-18 20:08:37 +08:00
就算不用 ipv6 负载均衡实例和地址转换服务也是可以解决的,毕竟能省一点是一点
既然是 ecs,大部分 ecs 实例天然支持 ipv6 的,然后直接用 ecs 的 ipv6 地址做 AAAA 解析就好。如果不想暴露 ipv6 地址在审核通过后取消掉 AAAA 解析就好(谨慎使用)。 现代 web 框架的网络层应该是都支持双栈 tcp 协议的,所以理论上解析做完了以后没有代码要改,还是很方便的。 |
9
Mitt 2021-07-18 21:20:44 +08:00
@ntop #3 没有部署海外节点,是腾讯云的服务器,也没有上 CDN,如果你本地没办法复现的话,也许你可以试试沟通一下说明本地使用是正常的,让对方再试一次,或者你再提交一个版本审核,然后网络报错的时候可以输出多一点信息来辅助确认问题,比如域名解析错误,IP 访问错误,或者是 https 证书错误也都是有可能的
|
10
mytsing520 2021-07-18 21:56:48 +08:00
你就简单点支持 IPv4+IPv6 双栈网络就行了
|
11
crystom 2021-07-18 22:00:35 +08:00
用 mac 的热点分享功能就可以模拟这种环境,服务器不需要支持 v6
|
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/ |
13
v2tudnew 2021-07-18 22:17:02 +08:00
挺搞笑的,苹果自家 N 多域名到现在都没有 AAAA 解析。
|
15
daimaosix 2021-07-18 22:24:47 +08:00
上个 CDN 吧楼主,大多数 CDN 都支持 IPv6 访问,你不用做什么改造。
|
16
azuis 2021-07-18 22:28:09 +08:00
并不需要 IPv6 网站,只要你的 App 里面没有硬编码 IP 地址就可以正常连接的。
|
17
ntop OP 爬了一个 V2EX 的老帖子,我看楼主也没有采取什么措施,最后是让苹果审核那边多试几次。另外一个方案是部署海外节点。。。现在越看越闹心了。。问题越来越不清楚了。。原贴: https://www.v2ex.com/t/357223#reply47
|
20
tsening 2021-07-18 23:14:24 +08:00
如果是网络问题的话开启一下阿里云的全站加速好了,大不了审核完了关掉?
|
22
ruixue 2021-07-19 00:10:51 +08:00 2
从本月 8 日开始,电信 163 网出口频频被重置连接。有网友称在 12 日重置现象好转,开始恢复到正常水平,而 14 日重置频率再度提升
亦有网友通过网络探针日志表明,这一现象实际未见显著好转,经常捕获到 Connection Reset 状态 海外回国访问用户受此影响较大,此外它还严重干扰到了跨境 API 调用需求的用户 ——有可能不是 ipv6 的问题,而是最近 163 出口随机劣化跨境流量的锅,参考 /t/788719 可以试试部署海外 CDN |
23
wang93wei 2021-07-19 00:12:02 +08:00
如果你的应用只在中国使用,请把发布的国家设置为中国,就不会遇到 IPV6 的限制了。我们都是这么做的。
|
24
exploreexe 2021-07-19 00:24:20 +08:00
其实啥都不用改,再次提交一下,说修复了,估计就能过。
问题出在苹果的网络有问题。 另外还有一点就是垃圾苹果审核不想干活,随便找个理由拒绝你。 一看就是刚接触 iOS 的开发者,老弟,你这只是刚开始,后面苹果审核会更加折磨你的。 |
25
ajaxfunction 2021-07-19 00:29:59 +08:00
我估计是没有网络重连功能,苹果 app 第一次下载,没点授权同意使用 wifi 或数据流量的时候,app 是断网的,
如果 app 已经启动了,才点同意使用网络,那么 app 就是无网络状态。 重启才能恢复正常 |
26
cz5424 2021-07-19 00:47:31 +08:00 via iPhone
CDN 套一层,全球加速,前一个月写的一次过(之前从没写过 IOS )
|
27
Leonard 2021-07-19 09:15:19 +08:00
多提交几次,我有时候同样的代码一字未改,第一次被拒第二次就过了。苹果审核人为因素占比很大。
|
28
salmon5 2021-07-19 10:14:20 +08:00
你的理解时有问题的,二次加工过的理解来提问,确实小白;
是你的 app 代码要适配 ipv6,和服务端网络没有任何卵关系 |
29
salmon5 2021-07-19 10:16:53 +08:00
苹果的审核员办公网出口有 NAT64,能访问 ipv4 的服务器;是你的 app 代码要适配 ipv6 only 下能工作;
|
30
dier 2021-07-19 10:30:41 +08:00
这个问题我遇到过,也解决过,原因就是苹果审核人员的网络访问不到你们服务器导致的。
我当时的解决方案就是在海外开个 VPS,部署一个反代把海外的访问请求解释到 VPS 的 IP 就行了,另外海外 VPS 一般也都支持 IPv6 可以一并用上。这个方法适合没有海外用户的,不然这个 VPS 会成为海外用户访问的瓶颈。 如果有海外用户,建议就用 CDN |
31
docx 2021-07-19 10:31:41 +08:00
说个题外话,链接文章并非来自阿里云官方,只是入驻的自媒体文章
|
32
bobzhangyong 2021-07-19 10:44:46 +08:00
1. 仔细看一下苹果的拒绝理由,如果是 ipv6 问题会明确说明是 ipv6 的
2. 苹果的 ipv6 也不是要求你的后端有 ipv6 支持, 它有一套转换机制,本质上要求用户再一个纯 ipv6 环境中可以正常访问, 通过 dns 6to4 转换, 它需要你 ios 的网络库 支持,你要检查你的网络库。 |
33
ntop OP @azuis 好的,我再提交试试。顺便问一下,在苹果的 App 审核消息中心那里直接回复和后台重新提交有什么区别,苹果的审核都会重新测试吗?
|
36
ntop OP @exploreexe 😭😭😭
|
37
ntop OP @ajaxfunction 还有这种问题吗,我是 iOS 新手。我的错误是在登录页面,点击登录后直接报网络错误。如果重新才能恢复的话,那是不是即使重连也是不行的?
|
39
ntop OP @dier 谢谢哦,我看大多数成功的解决方案是 1. 重新提交,让苹果再试试 2. 部署海外节点或者做海外加速,后者更主动一些。
|
40
weichengwu 2021-07-19 11:13:47 +08:00
先检测下海外访问状况 http://ping.pe
|
41
ntop OP @salmon5 亲哦,你都不看楼吗,APP 适配问题我不是已经说过了吗,而且请求都发到服务器了。硬编码的也能把请求发过来吗,我不懂。。。
|
42
huZhao 2021-07-19 11:24:38 +08:00
录制视频,上传后端申诉,一般就过审核了。
|
43
jwautumn 2021-07-19 11:26:24 +08:00
上架过很多 APP 。遇到这种情况的次数也挺多的。
大多数解决方案都是重新提交审核,就可以了。还没过就多提交几次。反正现在审核很快,半天一天的。 个人感觉是苹果的审核团队在的地区问题,被分配到了无法访问的地区,导致的无法打开。 所以我一般都备注一下,让分配在可以访问国内网的地区审核团队。虽然并没有卵用~~~ |
45
ntop OP |
46
Lemeng 2021-07-19 13:30:32 +08:00
也有可能习惯性拒绝。应该没问题吧
|
47
GDAOE 2021-07-19 14:14:27 +08:00 1
|
48
xiaooloong 2021-07-19 16:43:04 +08:00 2
之前我们也遇到过,其实跟 ipv6 无关,就是苹果审核那边的网络访问不到你的服务器。当时我们的服务跑在腾讯云,苹果审核死活访问不通,于是买了一台国外 vps 做反向代理转发到腾讯云就好了。
|
50
ntop OP @xiaooloong 能分享下实现细节吗,我不太明白部署 vps 之后的操作,是需要在手机 APP 里面判断当前的地址位置如果是在苹果那边就访问 vps 的地址,如果不是就访问正常的地址吗?还是 APP 不需要做任何更新,地址在路由解析的时候就会自动按照就近原则访问了国外的 vps
|
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 用户的使用数据了,结果反而我们自己的域名接口苹果那边访问不通。不知道是腾讯云的网有问题还是苹果的网有问题。 |
52
ntop OP @xiaooloong 我刚刚竟然复现了这个错误,而且 100%复现。在本地环境用 wifi 网络开 vpn 。直接报错, log 中打印:HandshakeException: Connection terminated during handshake,关掉 vpn 一起正常。
哎,你看这个错误。。。大概是上面又有动作了。 平时我测试都是白天测试的,开 vpn 也没问题,今天测试的时间为晚上 8 点左右对面正好刚起床。。 看来我要把 vps 部署起来了,真坑哦。 |