事情经过
最近我司研发的手游快要上线了,这个手游呢是基于现在非常流行的虚幻引擎 UE4 开发的,公司也是倾注了所有的人力和财力,所以我们整个公司都对它抱有非常大的期望。
项目组呕心沥血了 3 年多,终于在今年的 11 月份准备开始对外测试,我们也似乎看到了项目成功前的曙光,一款爆款手游马上就要诞生啦!加薪,奖金,走向人生巅峰等等,想想就另人激动。
iOS 端测试我们是通过 Apple 它自己的 TestFlight 平台来进行分发,前期统计好测试人员的邮箱后,统一在开服当天激活测试。
TestFlight 测试完成的挺顺利,但令人糟心的事才刚刚开始。
正常情况下,我们都是TF测试和正式提审同时进行的,问题就出现在正式的提审环节。
提交审核后没过多久,我们就收到了应用程序被拒的消息,大意是他们审核人员连接不上我们的游戏服务器,所以无法进行后续的审核。这对我们游戏行业来说再正常不过了,也许是运维部署的时候配置文件少配了,因为它提交审核的时候要求审核服需要一个纯净的环境,所以我们正常都是部署俩套的服务,TF测试一套和审核服一套。
自然而然运维就要背锅了,项目组拉上测试组在设备上装了开发包后,想重现这个 Bug,可是反复测试后发现无论是用 4G,WIFI 或者是找海外的同事协助测试,结果都是能进游戏服的。
这就让人头疼了,手游项目我司也不是只有这一个,怎么就单单就 UE4 被卡脖子了呢!
解决这个问题的重担自然而然的就落在了我们 iOS 组身上。首先,我开始在 Google 上疯狂的搜集信息,因为现在市面上用 UE 做的手游产品还很少,并没有太多可以避坑的指南,其次,我们还分析是不是因为前段时间 Apple 与 Epic 之间的官司,导致了 Apple 对 Epic 的产品做了黑名单。
image
但是经过细心的搜索之后,我们搜索到一些线索。其实,在 Apple 的开发者论坛中类似这样的帖子有很多,但是也并没有实质性的解决方案,如图:
image
还有人说他将网络传输协议从 UDP 改成 TCP 后,就通过了苹果的审核;于是,我找到项目的主程-社会王,让他修改网络协议,听完我的话后,社会王连忙摇头直呼改不了,改引擎的网络框架太复杂了,那这条路看来是走不了了,那就继续埋头找解决方案吧!。
我假设 Apple 的网络有白名单,黑名单,那它肯定有一份对外的文档给开发者看吧!抱着试试的心态,Google 了一下 Apple UDP TCP,不出所料,真有这样的一个文档说明,文档地址为:https://support.apple.com/en-us/HT202944
image
这个文档里面详细的介绍了 Apple 应用程序开发时该使用的有效端口号范围:
image
有些是苹果自己的产品使用的端口说明,那我们就挑它没有说明的端口使用不就行了吗?于是,我自信满满的找到社会王并说了这个解决方案,社会王深邃的黑眼圈瞬间光彩夺目了起来,立马抄起键盘噼里啪啦的敲了起来,把客户端的端口号改在了 49152 - 65535 之间,这下子应该没问题来吧,我们都按照它的文档来做了,总能通过审核了吧。我高高兴兴的提交了新版本,今天可以准点下班了。
美美的睡了一觉后,打开手机就是应用被拒的消息,还是连不上服务器,这大清早的开头就是暴击,差点把我击昏在床上,瞬间像泄了气的皮球,我把被拒消息发给社会王后,社会王久久没有给我回信息,我一度以为他已经被击昏在床上了,差点去他家敲门。没想到我刚到公司,就看到社会王已经在电脑前改 Bug 了,看来主程的心态确实好,抗打击能力确实比我这种菜鸡强。
看似所有的路都走不通了,咋整啊!期间众说纷纭,有以下这些版本,大家可以分析一下有没有道理,反正我没有求证过。
第一个版本
有人说是疫情导致了苹果的审核人员有一部分人会在家办公,他们的代理网络会把请求的端口转发,从而会导致端口号不在这个范围内。
关于这一点,我觉的有点胡扯。
第二个版本
有人分析说是因为苹果要求我们的服务器都要支持 ipv6,如果不支持的话,我们的云服务中间商会将 ipv6 的网络适配成 ipv4 ,这会导致端口的范围会改变,从而不能确保在有效的范围内,如果运气好的话,可能转换的结果就在有效范围内,反之就不在,导致审核人员连不上游戏服务器。
image
这一说法,我感觉还有点可信度,解决办法就需要把我们的游戏服务器改成支持 ipv6,但这一点,我没有去向运维考证。
就这样,因为进不去游戏服务器,我们的审核被卡了将近2个月,可以来欣赏一下我们的打回记录:
image
后序
我写这篇文章的原因也是因为这个奇葩的事情把我折腾的够呛。既然你审核过不了,那我咨询你技术专家可以吧!苹果开发者账号每年有俩次技术咨询的机会,于是我诚意满满的用谷歌翻译给 Apple 的技术支持写了封邮件。
没想到的是,Apple居然回信给我,大意是他们支持中文支持,可以用中文重新给他们阐述问题,于是我又重新用中文发了一遍。
但是,重点来了,他居然给我回复说他处理不了这个技术问题,这个不是他们的技术支持范围。
这一下子给我整蒙圈了,虽然我寻求帮助的次数不多,但我也不是第一次请求技术支持,这么奇葩的回复我还是第一次遇到,哈哈,给我整笑了,我都不知道该怎么回复他。
原本我以为我可能因为解决不了问题,要被社会王开除了,抱着侥幸的心理,要不再提一下吧!说不定换审核员了。
重点来了,特么的这次审核居然进游戏了,肯定是我感动了苹果爸爸,虽然还是因为内购的原因被拒,但是能进游戏就让我看到了希望,我立马把结果通知了社会王,并狠狠的吹嘘了一下自己是如何滴优秀,社会王表示"小伙子干的不错,以后游戏挣钱了,给你记一大功"。
好吧,既然能进游戏了,那这问题就清晰的多了,肯定不是我们游戏的问题了,等社会王出好包以后,我兴高采烈的进行了第 N 次提审。
但是,今天又收到了这样的被拒消息:
image
我特意给自己用同样的包发了个 TF 测试,测试并无任何问题。
我现在严重怀疑苹果的审核人员是刚培训的,哎~
image
目前已申诉,未完待续....
想法
经历过这个奇葩的事情后,我萌生了一个想法,要不我弄个开源项目,叫做 "奇葩的苹果审核",大家可以在里面写上自己遇到的一些审核的奇葩事以及解决方案,帮助更多的开发者避坑。
欢迎大家在评论区留言讨论。