ios - iOS 应用被拒绝 - 指南 5.1.2 - 法律 - 隐私 - 数据使用和共享。“为用户设备创建唯一标识符”
问题描述
“我们在审查中发现,您的应用程序收集用户和设备信息以创建用户设备的唯一标识符。以这种方式对用户设备进行指纹识别的应用程序违反了 Apple 开发者计划许可协议,不适合该应用程序商店。具体来说,您的应用程序使用经过算法转换的设备和使用数据来创建唯一标识符以跟踪用户。您的应用程序收集的设备信息可能包括以下一些:defaultManager、NSLocaleCollationIdentifier、NSLocaleQuotationBeginDelimiterKey、NSLocaleCurrencySymbol 和 NSLocaleExemplarCharacterSet。
我不知道如何解决这个问题。我将“UIDevice.current.identifierForVendor?.uuidString”和“UUID().uuidString”存储在 UserDefaults 和 Keychain 中,然后将它们发送到服务器。
Podfile 的一部分
pod 'AppAuth', '1.2.0'
pod 'Firebase/Core', '7.5.0'
pod 'Firebase/Messaging', '7.5.0'
pod 'Firebase/RemoteConfig', '7.5.0'
pod 'Firebase/Performance', '7.5.0'
pod 'Firebase/Analytics', '7.5.0'
pod 'Firebase/Crashlytics', '7.5.0'
pod 'FBSDKCoreKit', '9.0.0'
pod 'FBSDKLoginKit', '9.0.0'
pod 'FBSDKShareKit', '9.0.0'
# Ads
pod 'Google-Mobile-Ads-SDK', '7.69.0'
pod 'FBAudienceNetwork', '6.2.1'
pod 'InMobiSDK/Core', '9.1.1'
pod 'mopub-ios-sdk', '5.15.0'
pod 'Verizon-Ads-StandardEdition', '1.8.1'
# Ads Medation
pod 'GoogleMobileAdsMediationFacebook', '6.2.1.0'
pod 'GoogleMobileAdsMediationInMobi', '9.1.1.0'
pod 'GoogleMobileAdsMediationMoPub', '5.15.0.0'
pod 'GoogleMobileAdsMediationVerizonMedia', '1.8.1.0'
pod 'AppBoxoSDK', '1.3.39'
pod 'SAMKeychain'
更新:
@dfd 谢谢,兄弟。你为我节省了很多时间。我在 appstoreconnect 上更改了应用隐私和隐私政策,然后审核通过了。
解决方案
只是为了给出如何解决这个问题的另一个提示。
长话短说
我发现当我用 , 导入Branch
时CocoaPods
,AdSupport
由于某种原因被动态链接到应用程序。切换到Swift Package Manager
解决了我的问题。
我还按照上面的建议更新了我的隐私设置,并确保我对每个部分的第二部分回答“否”(跟踪“否”)。
全面披露
只要向用户请求许可,就可以使用 IDFA 。这不会阻止第 3 方尝试访问此标识符(系统只会返回 0)。例如查看Branch如何处理它,他们在运行时检查AdSupport
框架。
据我了解,如果他们检测到此框架已链接(您不一定在项目中看到它Frameworks, Libraries, and Embedded Content
),他们将拒绝您的 App。
就我而言,我发现当我导入Branch
时CocoaPods
,AdSupport
由于某种原因被链接了。切换到Swift Package Manager
解决了我的问题。您可以使用以下代码段进行检查:
// DO NOT IMPORT AdSupport
if NSClassFromString("ASIdentifierManager") != nil {
print("AdSupport is linked somehow")
}
我还查看了我的隐私设置,但这对每个应用程序都非常特殊。在每个部分中,我都尽可能地更新了复选框,在单击Next后,我确保第二个问题(指跟踪)被回答为NO。
最后,对于用户 ID和设备 ID部分,我确保未选中第三方广告和开发者的广告或营销。
推荐阅读
- python - 在 Python 中按日期绘制不同的计数
- c - 这个递归删除节点函数是如何工作的?
- php-curl - php curl PUT 请求
- c# - 在文件 .cshtml 中与 vue 的动态链接中的符号 {{ }} 问题
- entity-framework - 带有 SharePoint 列表的实体框架核心?
- npm - 对于 ADO 管道上的 dotnet 发布,使用私有源的 NPM 身份验证失败
- javascript - 使用 JavaScript 从数组中的字符串中删除所有字母字符和前导零
- symfony - EventSubscriber 中的 Symfony getUser()
- r - poly(x,2)2 的含义是什么?
- html - 在 vuetify 中删除 v-select 中的额外输入