Flutter IOS 提交AppStore 审核失败

/  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 文件下面添加麦克风权限

NSSpeechRecognitionUsageDescription
App需要您的同意,才能访问语音识别

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

Flutter IOS 提交AppStore 审核失败_第1张图片

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

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





	aps-environment
	development

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

Flutter IOS 提交AppStore 审核失败_第2张图片

 / 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  健康更新

NSContactsUsageDescription
描述为什么使用通讯录

NSCalendarsUsageDescription
描述为什么使用日历

NSBluetoothPeripheralUsageDescription
描述为什么使用蓝牙

NSMicrophoneUsageDescription
描述为什么使用麦克风


NSHealthUpdateUsageDescription
描述为什么使用健康更新数据

NSHealthShareUsageDescription
描述为什么使用健康分享数据

你可能感兴趣的:(Flutter,实战,flutter,appstore,info.list,aps-environment,Notification)