目录
一、前言
二、APP 审核备案新规
(1)iOS 上架审核申请被拒
(2)苹果应用商店重大调整
(3)首次备案流程
① 阿里云备案
② 华为云备案
③ 腾讯云备案
三、iOS 首次上架拒审原因分析
(1)首次拒审:iOS 17 兼容性
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
⑤ 增加 APP 操作手册说明
(2)首次/二次拒审原因:Apple Pay 的 PassKit 框架使用问题
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(3)首次拒审原因:应用内购产品的名称和描述一致
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(4)首次/二次拒审原因:Info. plist 的 UIBackunderModes 键勾选声明支持音频,后台运行却无法播放任何可听内容
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(5)三次拒审原因:找不到站内消费
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(6)三次拒审原因:检测有隐藏功能或内容,怀疑绕过 app,站外消费,同时检查 sdk
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(7)三次拒审原因:有麦克风的请求,但是没有充分解释为什么要使用
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
(8)三次拒审原因:表明年龄和性别字段和核心功能不相关
① 拒审原文
② 拒审译文
③ 拒审原因分析
④ 解决方案
一、前言
- 近期我加入了一家新创业公司,新创业公司一开始普遍面临着许多问题,资金周转和开发人员短缺并不是最大的挑战。
- 相反,各种公司资质、备案手续、软件备案以及首次上架审核等流程问题才是最令人头痛的。
- 这些流程通常耗时很长,而且由于材料和资质不完善等原因,会导致初次上架审核被拒多次,进而延长整个流程。
- 对于创业公司而言,他们很可能在等待审核期间无法继续推进其他工作。其中,最为耗时且棘手的是iOS上架审核,其严格的审核制度进一步拉长了整个流程。
- 很可惜的是,我公司选择了首先通过 iOS 上架而非 Android 上架;所以开发未做好 Android 打包与测试兼容准备。
- 而更令人沮丧的是,自 2023 年 9 月开始,无论是小程序、Android 还是 iOS 的上架审核,在原有的公司备案流程之上,又增加了软件备案的审核流程。
- 这意味着创业公司要经历大约两个月的流程,既要处理 iOS 上架初审被拒,还要处理软件备案流程。
- 本文记录我司首次上架 iOS 被拒的各种奇葩理由和解决方案,大家可以避避坑!
二、APP 审核备案新规
(1)iOS 上架审核申请被拒
(2)苹果应用商店重大调整
苹果应用商店大变动,中国大陆上架的 App 必须有备案号https://baijiahao.baidu.com/s?id=1778561534851069922&wfr=spider&for=pc
可以看到新规严重坑了 9 月/ 10 月 首次提审的 APP:
- 今年 2023 年 8 月,工业和信息化部就出台了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》
- 2023 年 9 月到 2024 年 3 月底,这段时间里,《通知》发布前就已经开展业务的 App,得向住所所在地的省级通信管理局去备案。
- 到了 2024 年 4 月到 6 月底,电信主管部门会组织检查 App 的备案情况,对还没履行备案手续的 App,会依法进行处理。
- 已经在 App Store 上架的 App,就算不填备案号也能正常提审。但这只是暂时的,如果明年 4 月还没备案号的话,App 就可能会被下架了。
(3)首次备案流程
可以选择以下任一服务商提供备案审核服务:
- 阿里云
- 华为云
- 腾讯云
① 阿里云备案
阿里云首次备案流程https://help.aliyun.com/zh/icp-filing/user-guide/for-the-first-time-the-record-process阿里云 APP 备案操作流程https://developer.aliyun.com/article/1325019阿里云域名备案操作文档https://www.kancloud.cn/ocityomall/aliyunyumingbeian/3028484
阿里云 App 备案快速入门知识https://wanwang.aliyun.com/qualificationrec/bazszl?spm=5176.27804673.J_9865808500.8.379a7365EpEkgy 阿里云 ICP 备案教程https://beian.aliyun.com/#:~:text=1%20%E5%A1%AB%E5%86%99%E4%BF%A1%E6%81%AF%20%E7%99%BB%E5%BD%95%E9%98%BF%E9%87%8C%E4%BA%91%E8%B4%A6%E5%8F%B7%E5%A1%AB%E5%86%99%E4%BF%A1%E6%81%AF%E5%8F%8A%E4%B8%8A%E4%BC%A0%E8%B5%84%E6%96%99%202%20%E9%98%BF%E9%87%8C%E4%BA%91%E5%88%9D%E5%AE%A1%201%E4%B8%AA%E5%B7%A5%E4%BD%9C%E6%97%A5%E5%AE%8C%E6%88%90%E7%94%B5%E8%AF%9D%E6%A0%B8%E9%AA%8C%E5%B9%B6%E5%91%8A%E7%9F%A5%E5%88%9D%E5%AE%A1%E7%BB%93%E6%9E%9C%203%20%E5%B7%A5%E4%BF%A1%E9%83%A8%E7%9F%AD%E4%BF%A1,%E5%B7%A5%E4%BF%A1%E9%83%A8%E7%9F%AD%E4%BF%A1%E6%A0%B8%E9%AA%8C%E9%9C%80%E8%A6%81%E5%9C%A824%E5%B0%8F%E6%97%B6%E5%86%85%E5%AE%8C%E6%88%90%204%20%E7%AE%A1%E5%B1%80%E5%AE%A1%E6%A0%B8%20%E7%AE%A1%E5%B1%80%E5%AE%A1%E6%A0%B8%2020%E4%B8%AA%E5%B7%A5%E4%BD%9C%E6%97%A5%E5%86%85%E5%AE%8C%E6%88%90%E5%8F%AF%E7%99%BB%E5%BD%95%E9%98%BF%E9%87%8C%E4%BA%91%E8%B4%A6%E5%8F%B7%E6%9F%A5%E8%AF%A2%205%20%E5%A4%87%E6%A1%88%E6%88%90%E5%8A%9F%20%E7%AE%A1%E5%B1%80%E4%B8%8B%E5%8F%91%E5%A4%87%E6%A1%88%E5%8F%B7%E5%B9%B6%E5%AE%8C%E6%88%90%E5%85%AC%E5%AE%89%E5%A4%87%E6%A1%88
② 华为云备案
华为云 > ICP 备案> 使用 PC 端备案> 首次备案流程https://support.huaweicloud.com/pi-icp/icp_03_0002.html
华为云 > ICP 备案 > 使用 APP 端备案 > 首次备案https://support.huaweicloud.com/usermanual-icp/icp_08_0002.html华为云 > ICP 备案 > 公安备案和经营性备案 > 公安备案https://support.huaweicloud.com/tg-icp/icp_03_0014.html
③ 腾讯云备案
腾讯云首次备案流程https://cloud.tencent.com/document/product/243/97668
三、iOS 首次上架拒审原因分析
(1)首次拒审:iOS 17 兼容性
① 拒审原文
Guideline 2.1 - Performance - App Completeness
We discovered one or more bugs in your app. Specifically, the app launched into a blank screen. Please review the details below and complete the next steps.
Review device details:
- Device type: iPhone
- OS version: iOS 17.0
Next Steps
Please run your app on a device to reproduce the issues, then revise and submit your app for review. If at first you're unable to reproduce the issue, try the following:
- For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce.
- For app updates, install the new version as an update to the previous version, then follow the steps to reproduce.
If we misunderstood the intended behavior of your app, please reply to this message in App Store Connect to provide information on how these features were intended to work.
Resources
- For information about testing apps and preparing them for review, see Testing a Release Build.
- To learn about troubleshooting networking issues, see About Networking.
- Watch a video from App Store Review with tips for preventing common rejections.
② 拒审译文
准则 2.1 - 性能 - 应用完整性
我们在您的应用程序中发现了一个或多个错误。具体来说,应用程序启动到一个空白屏幕。请查看下面的详细信息并完成后续步骤。
查看设备详细信息:
- 设备类型:iPhone
- OS版本:iOS 17.0
后续步骤
请在设备上运行您的应用程序以重现问题,然后修改并提交您的应用程序以供审核。如果一开始您无法重现问题,请尝试以下操作:
- 对于新应用程序,请从设备上卸载所有以前版本的应用程序,然后安装并按照步骤进行复制。
- 对于应用程序更新,请安装新版本作为上一个版本的更新,然后按照步骤进行复制。
如果我们误解了您的应用程序的预期行为,请在 App Store Connect 中回复此消息,以提供有关这些功能如何工作的信息。
资源
- 有关测试应用程序并准备审核的信息,请参阅测试发布版本。
- 要了解网络问题的故障排除,请参阅关于网络。
- 观看来自 App Store Review 的视频,其中包含防止常见拒绝的提示。
③ 拒审原因分析
- 预先兼容 iOS 版本审核的天坑:我司提审时,iOS 17 并未上线推广,是拒审一周后苹果官网才推广 iOS 17 的,所以当时测试未考虑 iOS 17 兼容问题,这就是一个天坑!这审核简直毫无人性,让首次上架的 APP 预先兼容 iOS 未上架推广的版本,而且 xcode 当时未出开发调试的 iOS 17 版本,导致开发 Mac 和 xcode 同步升级后,一堆不兼容问题,只能降级,也无法调试 iOS 17!当时我司根本无法调试与开发 iOS 17 兼容问题!
- 不兼容页面为第三方页面的天坑:我司的 APP,启动授权蜂窝流量后,会自动跳转到本机号码登录页,而本机号码登录页,是来自第三方页面,极光登录的页面,极光获取本机号码只有页面提供嵌套,而无法使用接口方式,所以这个页面不兼容 iOS 17 导致审核人员启动后黑屏拒审;而我司开发无法修改第三方页面的兼容问题!也没办法联系极光那边的开发解决这个 iOS 17 兼容问题!
④ 解决方案
区分 iOS 版本跳转不同的登录页:
我司的 APP,除了来自极光的第三方本机号码登录页,还有自研的手机验证码登录页,所以做出解决方案:
- iOS 16 及以下版本在授权蜂窝流量后会自动跳转到本机号码登录页
- iOS 17 及以上版本不管如何授权网络都会默认跳转到手机验证码登录页
⑤ 增加 APP 操作手册说明
- 建议首次提审时就要写这个文档,并且准备 word 版本和 h5 在线访问版本,同时在 APP 增加 “操作手册” 入口,我司是第 2 次提审被拒之后才准备这个文档,严重体会到 iOS 审核人员对我们的 APP 理解困难,甚至对方都没登录成功进到 APP,所以要写一个附上 APP 使用流程图的详细操作手册。
- “操作手册” 需注明权限授权说明、隐私安全说明、每个功能使用说明、第三方页面引用、第三方登录、不同版本隐藏功能、放开全部收费功能、付费说明流程、付费解锁说明等等的详细使用说明、隐私信息获取与使用说明等等,避免持续打回!
- 这个操作手册一开始产品不准备提供入口的,所以没有写,毕竟很少见 APP 有操作手册这种东西,所以前两次拒审都以为是审核备注没说明白的原因,后来发现那个 2000 字的审核备注不够写,又担心 iOS 审核人员理解能力,干脆写一个操作手册,审核备注下有个上传文档的功能,直接上传这一份 word 文档,同时搞成 h5 页面,在审核备注强调之前被打回的回复外,在最后再附上 h5 操作手册在线访问文档地址,方便对方查看,确保多方面考虑!
本机号码一键授权登录页操作手册说明示范如下(这是我作为测试角度写的,然后让产品过目,UI 配图,所以如果产品有时间可以交给专业人士书写):
(1)功能说明
① 本机号码登录页:您可以使用本机手机号码进行一键登录。
(2)授权说明
① 这是通过第三方极光登录入口,提供便捷的登录方式。
② 如果您的设备运行 iOS 16 及以下版本且已授权蜂窝网络权限,则可以使用本机号码一键授权登录。
③ 如果您的设备未授权蜂窝网络权限,或者运行 iOS 17 及以上版本,则该入口将被隐藏,可另外使用手机号码、短信验证码授权登录。
④ 我们会存储您的手机号码,但请放心,我们将确保数据安全,并支持账户注销。
⑤ 请注意,首次获取本机号码需要先授权蜂窝网络权限。如若启动页时网络授权选择“无线局域网与蜂窝网络”,则可以直接进入本机号码登录页;如若启动页时未进行网络授权,会自动跳转到验证码登录页,此时网络授权选择“无线局域网与蜂窝网络”,需要上划 APP 清理后台进程才可以再次进入到本机号码登录页。
(2)首次/二次拒审原因:Apple Pay 的 PassKit 框架使用问题
① 拒审原文
Guideline 2.1 - Information Needed
We're looking forward to completing our review of your app, but we need more information to continue. Specifically, we noticed that your binary includes the PassKit framework for implementing Apple Pay, but we were unable to verify any integration of Apple Pay within your app.
Apple Pay is a mobile payment technology that provides an easy and secure way for users to pay for physical goods and real-world services in apps and on the web.
Next Steps
If your app integrates Apple Pay, please indicate where in your app we can find Apple Pay functionality.
If your app does not include any Apple Pay functionality, please indicate this information in the Review Notes section for each version of your app in App Store Connect when submitting for review.
Resources
Learn more about implementing Apple Pay.
② 拒审译文
指南 2.1 - 所需信息
我们期待完成对您的应用程序的审查,但我们需要更多信息才能继续。具体来说,我们注意到您的二进制文件包含用于实现 Apple Pay 的 PassKit 框架,但我们无法验证您的应用程序中是否集成了Apple Pay。
Apple Pay 是一种移动支付技术,为用户在应用程序和网络上支付实物商品和现实世界服务提供了一种简单安全的方式。
后续步骤
如果您的应用集成了 Apple Pay,请指出我们可以在您的应用中找到 Apple Pay 功能的位置。
如果您的应用不包含任何 Apple Pay 功能,请在提交审核时在 App Store Connect 中每个版本的应用的审核说明部分中注明此信息。
资源
详细了解实施Apple Pay。
③ 拒审原因分析
首次拒审分析:
- iOS 审核人员未进入 APP 直接拒审:我们的 APP ,有个商品功能调用苹果的钱包支付功能,无其他支付方式,但需要先登录(支持游客模式访问)进入主页才可以看到商品支付模块,因此我们第一次看到这个拒审原因,先查询正式环境数据库的用户表数据,发现无新增陌生账号,也就是 iOS 审核人员根本没有登录进入 APP 就直接拒审了
- 仅提包审核勾选 iOS 货架商品未审核备注说明支付功能详情:因为 iOS 审核人员根本没有进入 APP,有可能 iOS 17 不兼容极光本机号码登录页,所以对方直接启动黑屏,所以只能代码扫描;而对方仅扫描代码,发现 APP 的二进制文件包含用于实现 Apple Pay 的 PassKit 框架,当时提包审核时却没有在审核备注中用文字着重说明支付功能详情,所以导致 iOS 审核人员没有在应用中找到 Apple Pay 功能的位置。
二次拒审分析:
- 苹果支付钱包调用 Apple Pay 和 IAP 内购 不一样:第一次拒审我们以为只要在审核备注中强调说明支付功能在哪即可,支付后在哪使用,结果还是被拒了,我们确认用了苹果钱包支付,后面前端开发确认我们用的不是 Apple Pay 的 PassKit 这个框架,Apple Pay 和 IAP 内购 不是一回事,我们用的是用的是 IAP 内购,所以审核备注还需要强调说明所使用的是 IAP 内购 而不是 Apple Pay
④ 解决方案
iOS 提包审核时,在审核备注中文字说明一下支付功能:
- 通过上述分析,我们发现无需修改代码配置,只是 iOS 前端开发在提包审核时,在审核备注中添加清楚文字说明一下支付功能即可
- 但是二审发现未能解决这个问题,我们确认用了苹果钱包支付,后面前端开发确认我们用的不是这个框架,Apple Pay 和 IAP 内购 不是一回事,我们用的是用的是 IAP 内购,所以审核备注还需要强调说明所使用的是 IAP 内购 而不是 Apple Pay
Apple Pay 和 IAP 内购 区分:
Apple Pay 和 IAP 内购 不一样,我们使用的只是内购,就需要去除下图框出的部分,审核人员的意思就是我们的 APP 使用了apple pay 和 app 应用内购,但是他没有找到 apple pay 的支付地方,解决方案就是如下图框出部分删除,同时提审时还需要在审核备注强调说明所使用的是 IAP 内购 而不是 Apple Pay,并且强调说明内购支付功能的位置和付费解锁功能的位置,除了操作手册说明外,还需要在审核备注强调说明,以便回复审核人员,不能直接把整个操作手册给他们看,他们可能不会去看,所以强调审核备注也要写就是这个用处。
- xcode 删除参数配置(Apple Pay):Apple Pay(Release and Profile)
- xcode 仅保留参数配置(IAP 内购):ln-App Purchase
(3)首次拒审原因:应用内购产品的名称和描述一致
① 拒审原文
Guideline 2.3.2 - Performance - Accurate Metadata
We noticed that the display names and descriptions for your promoted in-app purchase products, 风铃x130, 风铃x84, 风铃x33, and 风铃x55, are the same, which makes it hard for users to identify what they are purchasing from the App Store.
Next Steps
To resolve this issue, please revise the display names or descriptions for your promoted in-app purchase products to ensure each individual metadata item is unique.
Please note that display names for promoted in-app purchases can be up to 30 characters long, while descriptions can be up to 45 characters long.
Resources
- Learn how to view and edit in-app purchase information in App Store Connect.
- Discover more best practices for promoting your in-app purchases on the App Store.
② 拒审译文
指南 2.3.2 - 性能 - 准确的元数据
我们注意到,您推广的应用内购产品 风铃 x130、风铃 x84、风铃 x33 和 风铃 x55 的显示名称和描述是相同的,这使得用户很难识别他们从 App Store 购买了什么。
后续步骤
若要解决此问题,请修改推广应用内购产品的显示名称或描述,以确保每个元数据项都是唯一的。
请注意,推广站内消费的显示名称最长可达 30 个字符,而描述最长可达 45 个字符。
资源
- 了解如何在 App Store Connect 中查看和编辑应用内购信息。
- 在 App Store 上发现更多促进您站内消费的最佳实践。
③ 拒审原因分析
- iOS 提包审核时,勾选的 iOS 货架商品的名称和描述不能相同: iOS 前端开发在提包审核时,有支付功能的还需要勾选 iOS 货架商品,由于我们 APP 仅显示商品名称,无需显示商品描述,所以开发申请 iOS 货架商品时,描述直接复制商品名称黏贴,导致名称和描述一样,结果就被拒审了,所以商品名称和商品描述需要不同,而同一类别的商品描述可以一样,只要描述不和名称一样即可
- 被拒审过的勾选商品无法再次申请审核:我们首次提包审核时,勾选了 4 个货架申请,第一次无经验,以为只要直接修改商品名称和备注不一样,就可以重新提交商品审核,结果可能 iOS 审核有什么潜规则,这 4 个 id 的商品连续 10 个工作日都处于 “审核中” 状态,其他未勾选的商品修改描述后立马通过审核,这妥妥搞歧视啊,所以我们只能废掉这一批同 id 前缀的商品,更换商品 id 重建同个价格的商品,不然永远无法提交复审,因为提包审核必须勾选这 4 个商品,不然 APP 商品就会显示空
iOS 商品货架应用注意:
- 这个 iOS 货架商品是需要在研发阶段就开始提前申请的
- 测试阶段可以使用沙箱账号进行支付,沙箱账号是开发者在 iOS 申请 appid 时同步申请的账号,沙箱账号可以模拟苹果支付而不会扣苹果钱包的钱,直接点击 APP 关联已上架 iOS 货架的商品 id ,就会直接弹出沙箱支付弹窗,首次输入沙箱账号需要管理员绑定设备的验证码,之后就可以正常模拟苹果支付
- 其中商品 id ,是自定义前缀的和域名一样类型, 后缀是所选 iOS 支持的单品价格,比如 iOS 货架仅支持选择 9.9 而不能选择 9.99 ,选择 9.9 的后缀就是 9_9,然后前端需要提供商品 id 给后端开发写入代码中,才支持调起支付,商品 id 如下图
- 上架 iOS 货架商品时,还需要上传公司的 logo ,这个在支付时会显示公司 logo,还需要上传商品图,有指定尺寸,这个都需要 UI 提供
- 商品名称和商品描述不能相同
- 被拒审过的勾选商品无法再次申请审核,需要删除原商品 id 的商品,再次申请同价格的其他新商品 id 的商品,每次被拒都必须更换商品 id,重新上架商品,才不会一直卡在商品 “审核中” 状态,节省复审时间
④ 解决方案
- 修改商品描述和商品名称保持不一致:商品名称无需修改,原来的商品名称和描述都是 “风铃x10”,直接把全部商品描述改为 “支付对应价格购买对应的风铃数用于解锁应用内付费功能模块”
- 删除原商品,申请新商品 id 上架 iOS 货架:删除原商品 id 的全批商品,这次不再提前申请多个价位,仅申请所需的 4 个价位商品
(4)首次/二次拒审原因:Info. plist 的 UIBackunderModes 键勾选声明支持音频,后台运行却无法播放任何可听内容
① 拒审原文
Guideline 2.5.4 - Performance - Software Requirements
Your app declares support for audio in the UIBackgroundModes key in your Info.plist, but we are unable to play any audible content when the apps running in the background.
Background audio is intended for use by apps that provide audible content to the user while in the background, such as music player, music creation, or streaming audio apps.
Next Steps
If your app has a feature that requires persistent audio, reply to this message and let us know how to locate this feature. If your app does not have a feature that requires persistent audio, it would be appropriate to remove the "audio" setting from the UIBackgroundModes key.
Resources
- Learn more about our requirements for apps using background services in App Store Review Guideline 2.5.4.
- Review documentation for the UIBackgroundModes key. Please see attached screenshot for details.
② 拒审译文
指南 2.5.4 - 性能 - 软件要求
您的应用在 Info. plist 的 UIBackunderModes 键中声明支持音频,但当应用在后台运行时,我们无法播放任何可听内容。
背景音频旨在供在后台向用户提供可听内容的应用程序使用,例如音乐播放器、音乐创作或流式音频应用程序。
后续步骤
如果您的应用具有需要持久音频的功能,请回复此消息并告知我们如何找到此功能。
如果您的应用没有需要持久音频的功能,则应从 UIBackunderModes 键中删除“音频”设置。
资源
- 在App Store 审核指南 2.5.4中详细了解我们对使用后台服务的应用的要求。
- 审查留档的UIBackbaseModes 键。 请查看附加的屏幕截图以获取详细信息。
③ 拒审原因分析
Info. plist 的 UIBackunderModes 键勾选声明支持音频,后台运行却无法播放任何可听内容:
我们的 APP 有个语音包试听功能、语音重播功能、视频聊天功能,但是退出 APP 是不支持播放声音的,退出 APP 页面就会停止语音包试听音频播放、停止语音重播、停止视频聊天功能,所以无需支持音频,这个只是开发封包时一个选项,所以去掉勾选即可,但是这里仅去掉勾选还是会被拒;二次拒审后发现仅仅去除勾选还不够,还需要在代码中将 Background Modes 键的参数配置整个删除
④ 解决方案
- iOS 前端开发在封包时,在 Info. plist 的 UIBackunderModes 键去掉勾选:Audio, AirPlay,and Picture in Picture;特别注意,此方法无效,仅解决一半问题,依旧会被拒:第一次拒审后,仅将这个勾选去掉,然后审核备注说明有语音包试听功能、语音重播功能、视频聊天功能,但不支持进后台播放;二次提审还是被拒回来了,所以直接用下面的方法,直接把整个参数配置给删除了!
- Background Modes 键整个删除:直接在 xcode 中把 Info. plist 文件中的 Privacy - Background Modes 键整个删除,然后再重新打包提交即可
- 审核备注和操作手册强调说明:有语音包试听功能、语音重播功能、视频聊天功能,但不支持进后台播放,已将 Background Modes 键整个删除。
(5)三次拒审原因:找不到站内消费
① 拒审原文
Guideline 2.1 - Information Needed
We have started the review of your app, but we are not able to continue because we cannot locate the in-app purchases within your app at this time.
Next Steps
To help us proceed with the review of your app, please reply to this message providing the steps for locating the in-app purchases in your app.
If you are restricting access to in-app purchases based on factors such as storefront or device configurations, please include this information in your reply along with steps to enable the in-app purchases for our review.
Resources
Learn more about offering in-app purchases on App Store Connect Help.
② 拒审译文
指南 2.1 - 所需信息
我们已经开始审核您的应用程序,但我们无法继续,因为我们目前无法在您的应用程序中找到站内消费。
后续步骤
为了帮助我们继续审核您的应用程序,请回复此消息,提供在您的应用程序中查找站内消费的步骤。
如果您基于店面或设备配置等因素限制站内消费,请在回复中包含此信息以及启用站内消费的步骤供我们审查。
资源
详细了解在 App Store Connect 帮助上提供站内消费。
③ 拒审原因分析
- 没有在审核备注说明付费后的消费使用位置:审核人员根本没有登录进入系统,所以单独扫描代码和查看审核备注,会不清楚付费功能在哪
- 仅上免费语音包没上付费语音包误认为隐藏消费功能:我们 APP 语音包功能,本来仅准备上架 2 个免费的,所以定价 0,直接支持使用,没有其他付费语音包,所以可能被误以为隐藏消费功能
④ 解决方案
- 在审核备注说明付费后的消费使用位置:增加操作手册点明付费功能,强调注明付费功能,并附上 APP 使用流程图,在审核备注中,上传 word 文档,同时附上 h5 连接,在审核备注也大概说明一下付费的所有位置
- 将其中 1 个免费语音包设置为付费解锁语音包:我们 APP 语音包功能,将 2 个免费的语音包其中 1 个语音包,随便设置一个定价,这样就没有隐藏的付费功能了
(6)三次拒审原因:检测有隐藏功能或内容,怀疑绕过 app,站外消费,同时检查 sdk
① 拒审原文
Guideline 2.3.1 - Performance
We noticed that your app may contain hidden features, functionality, or content.
Specifically, your app includes Third Party Recharge or Top-Up, which enables the purchase of digital content, services, or functionality by means other than in-app purchase.
The App Store ecosystem is built on trust and users should never be misled about the apps they download. Attempting to hide features, functionality, or content in your app may lead to removal from the Apple Developer Program.
Next Steps
- Review the Performance section of the App Store Review Guidelines.
- Ensure your app, as well as any third-party code and SDKs in your app, are compliant with all sections of the App Store Review Guidelines and the Apple Developer Program License Agreement.
- Revise or remove any hidden features, functionality, or content in your app.
- Once your app is fully compliant, resubmit for review.
If you feel that we have misunderstood how your app functions and that your app is compliant with the App Store Review Guidelines, please reply to this message in App Store Connect to explain how this feature works.
The next submission of this app may require a longer review time.
Resources
- Learn more about our policies for apps with suspected hidden features in App Store Review Guideline 2.3.1.
- Learn more about our policies regarding removal from the Apple Developer Program in the Apple Developer Program License Agreement.
② 拒审译文
指引 2.3.1 - 表现
我们注意到您的应用程序可能包含隐藏的功能、功能或内容。
具体而言,您的应用包括第三方充值或充值,可以通过应用内购以外的方式购买数字内容、服务或功能。
App Store 生态系统建立在信任的基础上,用户不应被误导他们下载的应用程序。试图在应用程序中隐藏功能、功能或内容可能会导致从Apple Developer Program中删除。
后续步骤
- 查看 App Store 审查指南的性能部分。
- 确保您的应用以及应用中的任何第三方代码和 SDK 符合 App Store 审查指南 和Apple Developer Program 许可协议的所有部分。
- 修改或删除应用程序中的任何隐藏功能、功能或内容。
- 一旦您的应用程序完全合规,请重新提交以供审核。
如果您认为我们误解了您的应用程序的功能,并且您的应用程序符合 App Store 审核指南,请在 App Store Connect 中回复此消息以解释此功能的工作原理。
此应用程序的下一次提交可能需要更长的审核时间。
资源
- 在 App Store 审核指南 2.3.1中详细了解我们针对疑似隐藏功能的应用的政策。
- 详细了解我们在 Apple Developer Program 许可协议中有关从 Apple Developer Program 中删除的政策。
③ 拒审原因分析
注意:
这是一个特别严重的拒审原因,千万不要有侥幸心理可以骗过 iOS 审核人员,比如搞后端开关控制前端页面按钮隐藏功能这一套,隐藏功能会触发惩罚措施,下次审核等待时间大概会是 7 天左右,会拖长复审流程时间!!!
- 隐藏消费功能:就上面一点,我们有个语音包是收费的,但是首次上架设置为全免费,可能会让审核人员误以为隐藏消费功能
- 开关控制隐藏第三方登录功能:我们的 APP 有微信、微博第三方授权一键登录功能,实现方式是,如果手机有安装微信/微博 APP,则显示微信/微博 logo 按钮登录入口,如果手机没有安装微信/微博 APP,则隐藏登录入口;但是,我们在网上看到微信/微博第三方登录除了提供 APP 授权登录外,也提供了 WEB 登录方式,也就是需要固定显示第三方登录入口,如果手机没安装微信/微博 APP,则需要手机浏览器跳转微信/微博 WEB 输入账号密码再授权登录,这个操作就很麻烦,用户体验也不好,产品不考虑;所以一开始为了避开这个没安装 APP 隐藏入口会误认为隐藏功能的问题,我们想了一个办法,那就是开关控制,后端通过一个参数控制前端 logo 按钮的显示,正式环境提审时,开关关闭,隐藏微信/微博登录入口,提审通过,则后端打开开关,显示微信/微博登录入口;结果,被拒了
④ 解决方案
- 将其中 1 个免费语音包设置为付费解锁语音包:我们 APP 语音包功能,将 2 个免费的语音包其中 1 个语音包,随便设置一个定价,这样就没有隐藏的付费功能了,增加操作手册点明付费功能,强调注明付费功能
- 打开开关,审核备注和操作手册强调说明第三方登录方式:增加操作手册点明付费功能,强调注明第三方登录方式,并附上 APP 使用流程图,在审核备注中,上传 word 文档,同时附上 h5 连接,在审核备注也大概说明一下第三方登录方式功能
第三方微信/微博授权登录(操作手册内容如下,附上截图):
(1)功能说明
① 本机号码登录页/验证码登录页:您可以直接点击微信/微博图标按钮,使用微信/微博账号进行第三方授权登录,无需额外输入账户信息。
(2)授权说明
① 如果您的设备已安装微信/微博 APP,则可以选择第三方微信/微博授权登录。
② 如果未安装微信/微博 APP,则该入口将被隐藏。
③ 我们会存储您的微信/微博号,但请放心,我们将确保数据安全,并支持账户注销。
(7)三次拒审原因:有麦克风的请求,但是没有充分解释为什么要使用
① 拒审原文
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requests the user’s consent to access the microphone, but doesn’t sufficiently explain the use of the microphone in the purpose string.
To help users make informed decisions about how their data is used, permission request alerts need to explain and include an example of how your app will use the requested information.
Next Steps
Please revise the purpose string in your app’s Info.plist file for the microphone to explain why your app needs access and include an example of how the user's data will be used.
You can modify your app's Info.plist file using the property list editor in Xcode.
Resources
- Watch a video from App Store Review with tips for writing clear purpose strings.
- See examples of helpful, informative purpose strings.
- Review a list of relevant property list keys.
② 拒审译文
指南 5.1.1 - 法律 - 隐私 - 数据收集和存储
我们注意到您的应用程序请求用户同意访问麦克风,但在目的字符串中没有充分解释麦克风的使用。
为了帮助用户就如何使用他们的数据做出明智的决定,权限请求警报需要解释并 包括您的应用程序将如何使用所请求的信息的示例。
后续步骤
请修改您的应用程序的 Info. plist 文件中麦克风的目的字符串,以解释为什么您的应用程序需要访问权限,并包含如何使用用户数据的示例。
您可以使用 Xcode 中的属性列表编辑器修改应用程序的 Info. plist 文件。
资源
- 观看来自 App Store 评论的视频,其中包含编写清晰目的字符串的技巧。
- 看到有用,信息目的字符串的例子。
- 查看相关属性列表键列表。
③ 拒审原因分析
麦克风获取权限的弹框文字未说明清楚功能:弹框文案都是用标准的说明,默认的文案,结果可能这个不清晰,另外,审核人员没有进入 APP,所以不清楚获取权限用在哪里
④ 解决方案
- 修改权限弹框说明文案:在 info 文件中,修改弹框备注
- 增加操作手册:操作手册,在每个功能下写清楚授权说明、隐私安全说明等,全部授权都给列出来,包括网络权限、麦克风权限、语音识别权限、图片上传获取相册权限等等,一次性写清楚
- 审核备注:强调获取麦克风权限的功能用处,其他授权详情查看操作手册 h5 在线地址、上传的操作手册 word 文档附件等等
① App 会在聊天服务中访问您的麦克风权限:为了实现语音交流功能,我们的应用需要访问您的麦克风权限,以便录制和转换您的语音输入。请放心,我们严格遵守隐私政策,只会在语音聊天期间使用麦克风权限,不会擅自录制或传输您的语音数据。
② App 会在聊天服务中访问您的语音识别权限:为了提供更便捷的语音交流服务,我们的应用可能需要访问您的语音识别权限。将使应用能够进行聊天或进行语音识别相关的功能,以更准确地转换您的语音输入为文字并作出回应。我们承诺只在聊天服务中使用该权限,并严格遵守隐私政策,确保您的语音数据安全和保密。
(8)三次拒审原因:表明年龄和性别字段和核心功能不相关
① 拒审原文
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requires users to register with personal information that is not directly relevant to your app’s core functionality. Specifically, the following fields or actions are required but do not appear to be directly relevant to your app’s core functionality:
Gender and Age
Next Steps
To resolve this issue, please either remove all required fields that are not relevant to the app or make those fields optional. Information requested during registration must be relevant to the features the app provides.
Resources
Watch a video from App Store Review with tips for doing more for users with less data. Please see attached screenshots for details.
② 拒审译文
指南 5.1.1 - 法律 - 隐私 - 数据收集和存储
我们注意到您的应用要求用户注册与您的应用核心功能不直接相关的个人信息。具体而言,以下字段或操作是必需的,但似乎与您的应用核心功能不直接相关:
性别和年龄
后续步骤
要解决此问题,请删除与应用程序无关的所有必填字段或将这些字段设为可选字段。注册期间请求的信息必须与应用程序提供的功能相关。
资源
观看 App Store Review 的视频,其中包含为数据较少的用户做更多事情的提示。
请查看附加的屏幕截图以获取详细信息。
③ 拒审原因分析
应用核心功能不直接相关的个人信息 - 性别、年龄:iOS 审核人员认为我们获取用户的 “性别、年龄” 与我们的核心功能无关,这一点简直无语,这是我们的核心功能,AI 需要根据用户性别、年龄来称呼用户,回复相关年龄阶段的问题,结果不允许我们必填这 2 个字段,这会导致 AI 称呼混乱,回复问题不分年龄,而且我们的用户设定是需要已成年的;但是拒审了,那就得想办法解决
④ 解决方案
- 设置性别跳过功能:在性别选择页,单选选项的,取消原本的默认值 “男”,“1男2女” 字典值,跳过的情况下就性别字典值为 0,前端传参后端 0,但是后端代码逻辑处理,默认以男性称呼用户,数据库用户表保存性别字段值为 0;这样可以避开代码扫描出前端默认值误以为依旧必填
- 设置年龄跳过功能:在年龄选择页,数字滚轴的组件,必须有一个默认值,默认选中 “25” 不变,年龄区间 “18~60”,跳过的情况下就年龄为 0,前端传参后端 0,但是后端代码逻辑处理,默认以用户年龄 “25” 岁对话,数据库用户表保存年龄字段值为 0;这样可以避开代码扫描出前端默认值误以为依旧必填
- 增加操作手册:操作手册,在新人流程功能下写清楚支持跳过性别、年龄,分 2 种情况走流程截图示意
- 审核备注:强调支持跳过性别、年龄设置,其他详情查看操作手册 h5 在线地址、上传的操作手册 word 文档附件等等