10次拒绝

我本来是应该在16日左右就写文章来记录这次冗长的提审经历,在提审的过程当中,我很多次想过要放弃,或者玩一回消失。也看到很多人在提审成功之后,很兴奋地去写“我要记录下来我这次App审核的心路历程”。而他们不过是被拒绝个3-5次,而我这次则是整整被拒绝了10次。

Round 1 5月31日

第一次提审发生在去日本玩之前,当时我整个心思已经飞到东京去了,当然回来的一段时间之内心也是一直没回来。当时我和老郭信誓旦旦地保证,“这个没啥问题,也没什么多余的东西,就是个新闻列表展示嘛~”,于是很开心地提交上去后,就去玩了。现在回想起来,我是如此地天真。真想给当时的我写个信啥的,说:“你个傻逼,要小心了!”

第一次被打回来的内容如下:

10.6 - Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected
10.6 Details
We noticed that third-party app QQ/WeChat is required to use third-party authentication method. The user should be able to login without installing additional applications.
Next Steps
If you choose to support third-party authentication, please use methods that can authenticate users from within your app, such as a native web-view.

另附上截图若干,我当时心想,这Apple的审核是真负责啊,得到的教训是:

  1. 第三方登录在未安装对应客户端的情况下,务必要提供对应的WebView认证方式,否则就给你Reject.解决办法是,集成第三方登录时,做出对应的客户端安装判断,如果没安装,干脆不显示!

在修改了这个部分之后,我傻逼兮兮地又一次提审了,还很NB地和老郭说,没事没事,之前没注意这个地方。

Round 2 6月10日

第二次提审返回结果的时候,我已经到这边的新公司报道了,刚从东北京回来嘛,自然是心高气傲,吃午饭都不订盒饭,还敢去和公司老大拍桌子提意见说UI设计不好看。这时候第二次被拒绝的结果回来了:

3.8 - Developers are responsible for assigning appropriate ratings to their Apps. Inappropriate ratings may be changed/deleted by Apple
10.6 - Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected
10.6 Details

Your app still includes an (检查更新) update button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism.

We’ve attached screenshot(s) for your reference.

Next Steps

Please remove the (检查更新) update feature from your app. To distribute a new version of your app, upload the new app binary version into the same iTunes Connect record you created for the app’s previous version. Updated versions keep the same Apple ID, iTunes Connect ID (SKU), and bundle ID as the original version, and are available free to customers who purchased a previous version.

Resources

To create new versions of your app, please see Replacing Your App with a New Version in the iTunes Connect Developer Guide.

In addition, we need additional information about your app.

At your earliest opportunity, please review the following question(s) and provide as much detailed information as you can. The more information you can provide upfront, the sooner we can complete your review.

What is your relationship with XX广播电视台?

3.8 Details

Finally, the rating you’ve selected is inconsistent with the content of your app. Since your app includes contests or sweepstakes, you must select “Yes” for Gambling and Contests in iTunes Connect.

Next Steps

Please update your Rating selections in iTunes Connect.

Log in to iTunes Connect
Click on “My Apps”
Select your app
Scroll down to select a Rating on the App Details page
Click the Edit button next to “Rating”
Change the Rating selections
Click “Save”
Once you’ve completed all changes, click the “Submit for Review” button at the top of the App Details page.

NOTE: Applications must be rated accordingly for the highest level of content that the user is able to access in the app.

这次主要问题集中在

  1. 有个更新按钮在那里,然而点了之后并没有什么卵用,解决方案是删掉。
  2. 你和XX广播电视台有什么关系呢?潜台词就是,你凭什么在App介绍里用人家的名号呢?当时我很自然地请公司帮我出了一个文件证明,盖了红章截了图,给人家的回复输入框写了一大堆。口气还很刚强,问人家,请问这个文档能不能证明我和公司的合作关系呢?如果不能,肿么才能证明呢?
  3. 我们的App评级不正确,因为我们的App介绍上提到了抽奖字样,所以你必须在“是否包含赌博内容”的标记上给丫打上 YES.我们痛定思痛,决定仔细捋一下咱们的评级,最后决定直接找个新闻平台类的App照抄.最后的结果是这样婶儿的。
    App rating

所以“情色的裸露内容”与“色情与裸体画面”是两码事你造吗。彼时我还沉浸在从岛国带回来的文库本的氛围中,不过,见到公司大领导开始闪烁其词,双眼不敢和对方直视了。

Round 3 6月23日

12天之后的深夜,随着Apple Watch上发来提示,我的App又进入了一次审核。一个多小时之后,再次迎来了失败的结果。

Thank you for resubmitting your app. We have continued the review and would like to provide our findings.

We began the review of your app but are not able to continue because we need a demo account to fully assess your app features.

Specifically, we noticed that your app did not accept the given demo account name/password.

Please provide demo account details, including passwords, in the App Review Information section for your app in iTunes Connect. Please ensure that the information you provide includes any data necessary to demonstrate the functionality of your app features.

To provide demo account information:

Log in to iTunes Connect
Click on “My Apps”
Select your app
Scroll down to “App Review Information”
Provide information in “Demo Account” and/or “Notes” as appropriate
Click Save
Click Submit for Review

While your iTunes Connect Application State shows as Metadata Rejected, we don’t require a new binary to correct this issue. Once this information is available, we can continue your review.

Fuuuuuuuuuuuuuk!!!我在测试的时候,忘记了将修改过的Demo Account密码修改回去!Apple这群爷就这样给你拒了!但是我又真的无话可说!!
千万千万不要欠儿蹬地来回修改测试用的账户
我们在这次之后,老郭决定将后台系统分成两个服务器,提审用的,专门就用来审核。完全隔离!!

Round 4 6月29日

又是深夜,又是开始审核两个小时左右之后,给出了被拒绝的结果。

Thank you for your resubmission. Upon further review of your application, we have found the following issues:

We need additional information about your app. At your earliest opportunity, please review the following question and provide as much detailed information as you can. The more information you can provide upfront, the sooner we can complete your review.

What is your relationship or affiliation with XX广播电视台?

Application Description:
“‘XXXX’ 是XX广播电视台都市频道面向省内观众推出的一款新媒体服务及互动平台.”

Also, your iTunes Connect settings indicate that your app serves third-party advertisements. However, we were unable to locate ads in your app.

Please reply to this message to provide the steps for locating third-party ads in your app.

Furthermore, we need a demo account to fully assess your app’s 社会 feature.

Please provide demo account details, including passwords, in the App Review Information section for your app in iTunes Connect. Please ensure that the information you provide includes any data necessary to demonstrate the functionality of your app features.

14.3 Details

Moreover, your app’s 社会 feature enables the display of user-generated content but does not have the required precautions in place.

Next Steps

It is necessary that you put all of the following precautions in place:

Users need a mechanism (举报) to flag objectionable content and report users generating this content
Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content
Use moderators to flag and remove inappropriate content and offensive users
Developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content
Developer needs a method for ejecting users who violate the terms of the EULA
55

面对如此长的一个说明文档,我的血压当时几乎是要冲破云霄的,这次的原因是,

  1. 对方再次提到,你和XX电视台是什么关系,草泥马呀我和XX电视台能是个啥关系啊!!就算我们有非同寻常的关系跟尼玛有蛋关系啊!!我已经发了长长地大图片给你们解释说明了,你们有木有看啊!!!
  2. 我们的程序中,有个加载了基于Web的论坛模块,我们没有提供论坛的测试帐号,弄死我吧,哈哈哈哈哈!!!
  3. 如果我们有论坛,那好,我们得具备以下预防措施,得能举报,能删帖,能拉黑。
    那天上午我没去公司,我完全地失去了信心,开始怀疑我回沈阳是不是个正确的撅腚。怀疑我走上Apple开发者阵营是不是正确,我是否具备作为一个开发者的资质,作为一个人的呢?我是谁,我从哪来,要往哪去,宇宙的尽头是个啥样子,我死以后我的意思要如何感知到自己意识的消失………………
    我写了一封信给Apple

    Hey guys:
    About the question,”What is your relationship or affiliation with XX广播电视台?”, I’ve already send a document picture to you about 2 weeks ago. I am a developer working for a company named “Sentong Media”, the company is holding a permission from “XX广播电视台XX频道”, I have a image in the attach file. If this document can not answer the question, please contact me by mobile phone or email, please.
    For the question, “Furthermore, we need a demo account to fully assess your app’s 社会 feature.” We don’t have a feature named ‘社会’, do you mean ‘社区’ ?If so, I will provide an account for this in the next resubmission.

Round 5 7月1日

14.3 - Apps that display user generated content must include a method for filtering objectionable material, a mechanism for users to flag offensive content, and the ability to block abusive users from the service
Hello,

Thank you for providing the documentation.

Please provide demo account details for 社区 and the app.

Also, could you provide the steps to locate the ads in your application?

Moreover, it is necessary that you put all of the following precautions in place for 社区 section:

Users need a mechanism (举报) to flag objectionable content and report users generating this content
Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content
Use moderators to flag and remove inappropriate content and offensive users
Developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content
Developer needs a method for ejecting users who violate the terms of the EULA

Best regards,

App Store Review

这封信有了回复的时候,我们已经决定用公司帐号再次提交了。那时候,公司的三位老大都已经高度关注这个问题了,而那时候,Android的版本已经提交了不知道多少版。我开始不想和公司任何人目光接触,负面情绪爆棚,火疖子东一个西一个的出现。

Round 6 7月9日

这是我们切换到公司帐号后的第一次提审,迎来的是另外一次Rejected. 这无穷无尽的感觉,我已经开始麻木了:

We began the review of your app but are not able to continue because we need a demo account to fully assess your app features.

Specifically, we were unable to log in with the demo account provided.

Please review the demo account details, including passwords, in the App Review Information section for your app in iTunes Connect. Please ensure that the information you provide includes any data necessary to demonstrate the functionality of your app features.

To provide demo account information:

While your iTunes Connect Application State shows as Metadata Rejected, we don’t require a new binary to correct this issue. Once this information is available, we can continue your review.

PLA 3.3.12

Additionally, we found that your app uses the iOS Advertising Identifier but does not include ad functionality. This does not comply with the terms of the iOS Developer Program License Agreement, as required by the App Store Review Guidelines.

Specifically, section 3.3.12 of the iOS Developer Program License Agreement states:

“You and Your Applications (and any third party with whom you have contracted to serve advertising) may use the Advertising Identifier, and any information obtained through the use of the Advertising Identifier, only for the purpose of serving advertising. If a user resets the Advertising Identifier, then You agree not to combine, correlate, link or otherwise associate, either directly or indirectly, the prior Advertising Identifier and any derived information with the reset Advertising Identifier.”

Note: iAd does not use the AdSupport framework, ASIdentifierManager, or the Advertising Identifier. Therefore they are not required for iAd implementations and should not be included in your app for iAd support.

If your app is serving ads, please:

Ensure that you have tested your app on a device, not just the simulator, and that you have removed all previous versions of your app prior to testing

Provide us the steps to locate ads in your app

If your app does not serve ads, please check your code - including any third-party libraries - to remove any instances of:

class: ASIdentifierManager
selector: advertisingIdentifier
framework: AdSupport.framework

If you are planning to incorporate ads in a future version, please remove the Advertising Identifier from your app until you have included ad functionality.

To help locate the Advertising Identifier, use the “nm” tool. For information on the “nm” tool, please see the nm man page.

If you do not have access to the libraries’ source, you may be able to search the compiled binary using the “strings” or “otool” command line tools. The “strings” tool lists the methods that the library calls, and “otool -ov” will list the Objective-C class structures and their defined methods. These techniques can help you narrow down where the problematic code resides.

又是一大堆,妈了个逼的。

  1. 他们又不能登录了,而不能登录的原因是什么你知道么,尼玛我们的Server当时跑在阿里云上,

当时阿里云停服维护了!!

  1. 另外就是,他们提到了使用IDFA的部分,那个部分一直绕得我云里雾里。大约是这样的,如果你要在App里加广告,那就得标记使用了Apple的IDFA,并且在程序中显式地使用这项技术。我们的情况是,我们未来一定会上广告,但是现在用的第三方库友盟里面用到了这个部分,所以我不得不声称我使用了IDFA,而我又没有显示一个广告出来。
    啊,我和老郭当时认真是研究过两个额外的问题
  2. How to locate apple’s review staffs?
  3. Where can we purchase weapon like gun and rockets?
    后来发现这两个问题的难度高于现在我们面对的问题,就乖乖地去继续解决问题了。
    解决方案是。
  • 集成任意一个使用了IDFA的第三方广告插件。我们的方案是,芒果广告平台 + ADMob.

Round 7 7月14日

We began the review of your app but are not able to continue because we need access to a video that demonstrates your app in use on an iOS device.

Please include the actual ads of being displayed within your app, and the demonstration of how to locate the ads within your demo video.

Once this information is available, we can continue with the review of your app.
公司高层们压力巨大,最后集体决定要找审核加急的渠道,也就是,野路子。并且已经在接触了,我很坦诚地在此注明,是因为我想正视自己的不足。接触到的野路子,我就不在这给点名了,两个方案,帮你加急,和帮你预审。加急+预审 1w,预审2k.
而我当时写的一封加急信,鬼使神差地奏效了,我不过是切身表达了一下我的感受而已,所以,合着我一封信给公司省了8k。

  • 你们不是要视频嘛,好,给你视频。

Round 8 7月15日

由于加急生效,审核交替很快速,第二天就继续了。我们抱着如果15号之后这个版本再被打回来就找野路子的心,提交了这个版本,仍然被拒绝,原因如下:

During review, your app crashed on iPad Air 2 running iOS 8.4 and iPhone 6 running iOS 8.4 when we:

  1. Launch the Application
  2. Login
  3. Tap 互动 button
  4. Tap 会员活动 button
  5. App crashed

This occurred when your app was used:

On Wi-Fi
On cellular network

We have attached detailed crash logs to help troubleshoot this issue.

好的!是我的错!是我的bug!

Round 9 & 10 7月15日

其实真正被Apple拒绝回来的,只有8次,因为我们找了帮忙预审的渠道,对方给出的测试页面兼职堪称精准专业,有理有据,重现方式详细具体,截图清晰,给出的修改建议明确直接。我无言以对,其中两条私以为是一定会被拒绝的,也就是我所谓被拒绝的第9次和第10次

  1. 新闻数据中包含Android字样!
  2. 分享链接打开的全是同一个不相关的地址。
    另外还有:
  3. 某些导航标签点击后没有数据
  4. 刷新按钮的样子太像更新,容易引起歧义。

之后,7月16日清晨,我的Apple Watch上提示App于早上5点开始进入审核状态,7点55分。过了!

过了!!!

我从床上跳起来,跑去给老郭打电话,彼时老婆,岳母和儿子正在小心翼翼地吃早饭,那段时间我简直就是颗地雷,一触即发,全家人得知后,全都松了口气,儿子都跟着蹦哒起来。值得一提的是,15日那天是爷爷三周年忌,我排开一切乱事,坚持去给爷爷扫了墓,不知是否我的祈求爷爷听到了吧。

Round 11 迟迟不出现的App

上线后24小时,App仍然在App Store上不出现。再次问道那世外的高人,对方说,推送市场应该只选择中国地区,修改后马上提交上线,待能搜索到了之后,再切换回去。

公司领导们有问题也已经不再问我,而是去直接问老郭,我想想也罢,难得我片刻清闲。可贵的是积存下一些经验。总体感觉是这样:

千万要把你做的App的每一个细节,都当做是真的在面对用户,任何东西都应该是有效的,可用的,安全的。

借着Apple App Store Review GuideLine中介绍里的一句话结束这篇超长blog:

We will reject Apps for any content or behavior that we believe is over the line. What line, you ask? Well, as a Supreme Court Justice once said, “I’ll know it when I see it”. And we think that you will also know it when you cross it.