/  iOS 上架审核过程常见的坑与解决方法  /

用户生成内容(UGC)缺少必要的审核

为了防止非法滥用用户生成的内容,从而给用户提供虚假信息、盗取用户的知识产权,社交应用以及应用当中包含用户生成的信息的应用必须包括下述功能:

过滤不良内容、提供举报机制、后台服务可以提供阻止骚扰用户的行为、提供官方联系方式,让用户可以快速联系到开发商

解决方案:

维秀直播 App 提供了用户实时弹幕功能,所以涉及到了 UGC,他们的处理方法是增加关键词过滤,还有通过房管的方式人工审核,处理违规用户。

应用中使用了 IDFA 被拒绝

IDFA 主要被用于广告中区分设备的作用。AppStore 禁止没有使用广告而采集 IDFA 的 App 上架,所以如果 App 本身没有广告的话,使用第三方 SDK 要注意检查是否含有 IDFA 广告模块。

解决方案:

如果应用本身有集成广告的话,只需要在提交审核的时候勾选正确的广告标识符选项即可。

如果应用本身未集成广告,却包含 IDFA的话。这种情况一般都是集成的第三方 SDK中包含IDFA 导致的。首先寻找是否有不包含 IDFA 的SDK 版本,如果没有的话可以参考 ShareSDK 的解决方法,通过后台配置在审核期间为应用添加广告,审核完成过后将广告展示去掉。

应用不支持 IPv6网络下使用

2016年6月1号起,苹果的审核人员会在 IPv6 网络上审核你的应用,所以如果你的应用程序无法使用 IPv6 协议,可能会被拒绝。

解决方案:

App 上架过程中就因为 IPv6 的支持原因被拒。我的解决方案是:

协调后端人员添加对 IPv6 网络的支持。

App 端更新相关的第三方 SDK,比如使用ASI 或者 AFN 的版本太低,使用最新的AFN即可解决问题。当然这些做完之后最好在Mac 上面搭建 IPv6网络供测试人员进行完测试再重新发布。

第三方登录、支付、分享未安装应用,提示下载被拒

这个问题其实被拒的原因有两种,第一种是未安装应用没有任何提示,这种情况下相当于应用有无效的按钮所以会被拒;第二种是提示下载对应的第三方 App,这也是苹果所不允许的。

虚拟产品未使用应用内支付(IAP)被拒

根据苹果官方最新的审核条款:如果你希望通过付费才可以解锁你的应用当中的一些功能(例如,订阅内容,游戏货币,游戏关卡,获取优质内容,解锁完整版本),你必须使用应用内付费(IAP)。如果这种情况下,应用使用了其他的第三方支付,应用将被拒绝上架。

解决方案:

审核的时候,把相应的虚拟产品隐藏起来,通过后再放出来,此招有风险,可能会受到警告信,甚至被封号,如果用户量小就无所谓了,先把App 搞上架!

审核的时候,走 IAP 的支付方式,审核完成后再通过服务器配置动态切换到支付宝、微信等第三方支付。该法类似于方案1,也存在风险。

学习58同城,让用户去网站购买产品,买了产品的账号到移动端使用功能。

老老实实的使用 IAP 吧。

使用后台定位被拒

关于位置服务苹果的审核条款原文如下:

使用位置服务的应用程序必须提供和位置服务直接相关的功能。使用基于位置的API不允许用于提供紧急服务,或者实现自动控制车辆、飞行器以及其他设备(小型的设备例如小型无人机和玩具例外),远程控制汽车警报系统等。在收集、传输和使用用户的位置数据之前,请确保你已经取得了用户的同意。如果应用程序使用了后台定位服务,务必在应用当中阐明其目的。并且使用后台定位的话需要提供一个明确的提醒告诉用户这么做会加快电量消耗。

一般应用在这一块被拒的原因有以下几种:

1.应用根本不需要定位功能。

2.应用需要定位功能,但是只需要短暂的获取少数的用户的位置,比如美团,新闻类的应用需要获得当前用户的所在城市,却使用了后台定位模式。

3.应用确实需要使用后台定位,比如打车类软件,但是应用中却没有任何界面展示这些定位数据。

解决方案:

4.如果你的应用根本不需要定位功能,但是还是在info.plist里面添加了location in theUIBackgroundModes key ,那么在plist文件里面移除UIBackgroundModes key就可以,这中情况较少,新手小白会犯这种错误。

5.如果只是简单获取位置不需要使用后台定位,只需要去掉info.plist 的文件中的 UIBackgroundModes 即可。

6.这种情况比较复杂,推荐的做法是通过表格或者轨迹展示出后台定位的数据,再提交审核的时候告诉苹果那个功能需要后台定位,具体展示后台定位的数据在那个界面,最后需要 Continued use of GPS running in the background can dramatically decrease battery life加到 App 描述里面,可以参考滴滴出行的描述,否则也会被拒绝。

info.plist 权限配置被拒

iOS 10 之后如果需要调用相机,蓝牙等设备时,需要在 info.plist 文件中进行相应的配置,否则应用会直接崩溃,在 iOS 10 之前则是无法访问。另外,如果在 info.plist 中调用了配置了权限在应用中却没有使用到也是会被拒的。

解决方案:

一定要注意自己的 App 在使用中用到了哪些权限,不要添加无用的权限,也不要缺少必要的权限。

应用提示更新被拒

应用内不能有任何提示更新应用的字样,且应用的更新只能通过 AppStore。因为苹果对于应用的更新有自己的一套策略,所以禁止应用本身提供更新方式,只要应用内出现。

解决方案:

如果不是很必要的话,尽量将应用内涉及到应用更新的部分去掉。如果真的需要使用应用更新,推荐的方法是应用启动的时候获取下应用在 AppStore上面的版本号,与自己的版本号进行比较,当自己的版本号小于 AppStore 上面的版本号时,提示更新,否则的话不显示更新相关的内容。

隐私条款问题被拒

在未获得用户事先允许,或未告知用户信息将被如何,在哪里使用的情况下,应用不可以传输用户数据。

解决方案:

《网站服务协议》《隐私条款》这些都不要少,注册时候让用户可勾选。另外注明需要的用户信息用来做什么。

未通过 HTTPS 访问被拒

App Transport Security(ATS) 是 Apple 为增强 iOS App 网络通信安全提出的安全功能,适用于iOS App 和 App Extension;在启用 ATS 之后,它会强制应用通过HTTPS(而不是 HTTP )连接网络服务。 WWDC 2016上提出,2016年底或2017年初,具体时间未定。App Store上架审核加强对ATS 配置的review,即强制应用必须通过HTTPS连接网络服务,而不是随手将NSAllowsArbitraryLoads置为 YES,否则审核不予通过。

解决方案:

ATS 的提出,是为了在系统层面保障iOS APP 网络通信的安全;Apple 只所以加强对ATS 配置的审核,是为了防止开发者们遇到ATS相关的场景时,只是简单地将 ATS完全关闭(只要没有强制性措施,开发者会这么做);在此基础上,App审核同样会遵循原则:App Review will require "reasonable justification" for most ATS exceptions。

Apple 官方给出的可以通过审核的声明 demo 如下:

1.必须使用第三方提供的服务,但是其没有支持 HTTPS;

2.必须通过域名连接到设备,但该设备不能支持安全连接;

3.必须展示不同来源的网页内容,但是不能基于 NSAllowsArbitraryLoadsInWebContent支持的类(UIWebView / WKWebView)实现;

4.载入加密的媒体资源并且其中不涉及个人信息。

由于 Apple 官方并没有给出 ATS 审核的完整说明,ATS 审核时什么才是合适合理的声明也没有明确的客观定义,以上 demo 描述仅能作为参照。

/ AppStore上架提示被驳回案例一 /

Dear Developer,

We identified one or more issues with a recent delivery for your app, "应用名称" 1.0.0 (1). Please correct the following issues, then upload again.

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Though you are not required to fix the following issues, we wanted to make you aware of them:

ITMS-90078: Missing Push Notification Entitlement - Your app appears to register with the Apple Push Notification service, but the app signature's entitlements do not include the 'aps-environment' entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the 'aps-environment' entitlement. Xcode does not automatically copy the aps-environment entitlement from provisioning profiles at build time. This behavior is intentional. To use this entitlement, either enable Push Notifications in the project editor's Capabilities pane, or manually add the entitlement to your entitlements file. For more information, see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_re

审核错误提示

需要在Info.plist 文件下面添加麦克风权限

<key>NSSpeechRecognitionUsageDescription</key>
<string>App需要您的同意,才能访问语音识别</string>

或者在Xcode工具里面进行添加

应用注册并申请了通知服务

需要在用Xcode打开的工程文件Runner.entitlements文件下配置 aps 环境

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>aps-environment</key><string>development</string>
</dict>
</plist>

配置完成后在Xcode编辑区域将会出现Push Notificaitions选项

/ AppStore上架提示被驳回案例二 /

App Store Connect
 
Dear Developer,

We identified one or more issues with a recent delivery for your app, "应用名称" 1.0.1 (2). Please correct the following issues, then upload again.

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCalendarsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothPeripheralUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSHealthShareUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSHealthUpdateUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the libra

审核错误提示

需要在Info.plist 文件下面添加麦克风权限

NSContactsUsageDescription   通讯录权限

NSCalendarsUsageDescription  日历权限

NSBluetoothPeripheralUsageDescription  蓝牙权限

NSMicrophoneUsageDescription  麦克风权限

NSHealthShareUsageDescription  健康分享

NSHealthUpdateUsageDescription  健康更新

<key>NSContactsUsageDescription</key>
<string>描述为什么使用通讯录</string><key>NSCalendarsUsageDescription</key>
<string>描述为什么使用日历</string><key>NSBluetoothPeripheralUsageDescription</key>
<string>描述为什么使用蓝牙</string><key>NSMicrophoneUsageDescription</key>
<string>描述为什么使用麦克风</string><key>NSHealthUpdateUsageDescription</key>
<string>描述为什么使用健康更新数据</string><key>NSHealthShareUsageDescription</key>
<string>描述为什么使用健康分享数据</string>

Flutter IOS 提交AppStore 审核失败相关推荐

  1. 分析appstore审核失败的真实案例及解决办法

    分析AppStore审核失败的真实案例及解决办法 App中设计的图标与Apple原生图标类似,Apple原生图标有专利保护,并且在Design Guideline里面规定,App的图标不能与Apple ...

  2. 提交AppStore审核总有意外出现?美团被下架

    6 月 18 日上午,百度云 iOS 版出现了线上事故,他们在提交 AppStore 审核的时候,把名字给弄错了.用户更新 App 之后,看到的 App 名字是 netdisk_iPhone,如下图所 ...

  3. iOS开发者遇到审核失败的原因及解决办法

    App中设计的图标与Apple原生图标类似,Apple原生图标有专利保护,并且在Design Guideline里面规定,App的图标不能与Apple图标雷同,如iTunes,App Store, i ...

  4. 分析AppStore审核失败原因及解决办法

    转自:http://news.18183.com/yjxw/201309/25244.html wubo9935 App中设计的图标与Apple原生图标类似,Apple原生图标有专利保护,并且在Des ...

  5. ios提交APP审核,因为需要访问相机权限被拒绝

    2018年8月26日 上午5:44 发件人 Apple 5. 1.1 Legal: Privacy - Data Collection and Storage Guideline 5.1.1 - Le ...

  6. 金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#)

    金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#) 最近在做金蝶相关的技术支持,记录一下插件开发步骤.使用C#开发 需求:实现表单点击保存,自动进行提交审核 1.打开VS,新建项目,选择类库 ...

  7. 跨平台应用开发进阶(二十五) :uni-app实现IOS云打包解决IOS提交审核相册等隐私描述语导致审核失败问题

    文章目录 一.问题描述 二.问题分析 三.解决方案:IOS云打包修改权限提示语 3.1 IOS隐私信息 3.2 设置方法 四.拓展阅读 一.问题描述 Guideline 5.1.1 - Legal - ...

  8. ios上架appstore,审核被拒 other

    1 ios上架appstore,审核被拒 other,怎么解决呀? 1.提交背景 1.不是新账号,也不是第一个app. 2.第一次审核被拒后,做出修改后提交了这次新的审核.(但我是一天提了2次审核,第 ...

  9. iOS 提交App store 正在等待审核,怎么重新上传

    问题: iOS  提交App store 正在等待审核,怎么重新上传? 解决办法: 首先找到如下图的:remove this version from review,然后点击进去. 点击remove ...

  10. uniapp ios提交失败,权限描述修改

    ios提交审核,驳回显示 We noticed that your app requests the user's consent to access the camera and photos, b ...

最新文章

  1. Linux查看实时带宽流量情况
  2. 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案
  3. 用于CUDA FFT的PyTorch包装器pytorch-fft
  4. oracle 字符串转为正数用 to_number()……
  5. Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)
  6. redis 安装后不能使用
  7. 日记——2019-03-08
  8. php视频上传教程,php上传视频的代码_PHP教程
  9. 关于 Service 设计初步(MSDN节选翻译)
  10. c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
  11. Mysql配置项sync_binlog=0
  12. eclipse插件开发总结
  13. php pmp是什么,pmp 总时差 自由时差 说明 和计算
  14. 1005打印任务取消不了 hp_HP打印机打印时任务打印不了时无法取消
  15. 心灵捕手——走进内心世界
  16. php融云开发文档,融云公众服务
  17. 基础算法题——天梯赛座位分配(化繁为简)
  18. mysql:Windows修改MySQL数据库密码(修改或忘记密码)
  19. java设计模式 (二) 创建模式
  20. 【C++项目】2048益智小游戏

热门文章

  1. MAC M1系统下的几种截图工具
  2. walking机器人仿真教程-激光导航-仿真单点导航
  3. correspondence analysis of drug and genotype(spss)
  4. 全基因组关联分析(GWAS)常见问题(工具,概念,脚本)
  5. python 多重类继承__init__
  6. 资产配置那些事-标准普尔家庭资产象限图
  7. api质量等级_API质量等级与机油选用指引
  8. 淘宝双十一喵果总动员之喵树大挑战玩法攻略
  9. JAVA之ZIP、RAR解压工具类
  10. Source(拉电流) Sink(灌电流)详解