一文解读苹果隐私新政:提供隐私清单文件

14,416 阅读12分钟

我正在参加「掘金·启航计划」


2024年2月29日更新

终于,苹果发布了关于 App Store 提交的隐私更新,明确了必须提供隐私清单的截止时间为2024年5月1日。

截屏2024-03-15 15.35.19.png


此前,苹果在 WWDC 2023 上宣布了SDK和应用程序的新隐私政策。此举将对App的隐私以及的应用程序开发、发布和营销产生巨大的影响。

新的政策包括两方面内容的要求:

  1. 提供隐私清单中的数据使用描述
  • 每个开发者都需要声明他们的应用程序和SDK的用途;
  • 对于某些特别敏感的影响隐私的SDK,你需要说明使用它们的原因;
  • 你必须说明你的应用是否使用数据进行追踪;
  • 无论你的应用程序是否正在追踪,你都需要选择要收集的数据类别;
  • 如果用户未通过 App Tracking Transparency 授予权限,苹果将阻止对追踪域的网络请求。
  1. 提供“需要声明原因”的API的使用描述
  • 有些API会导致App滥用用户信息;
  • 对于一些API,开发者需要声明使用原因,且你的使用原因必须与苹果的要求相符;
  • 如果你提供的原因不在官方原因列表内,苹果会认为你在滥用该API。

苹果要求应用程序和第三方SDK——作为XCFrameworks、Swift软件包或框架包分发——可以包含一个名为PrivacyInfo.xcprivacy的隐私清单文件。

隐私清单是一个属性列表,记录您的应用程序或第三方SDK收集的数据类型,以及您的应用程序或第三方SDK使用的API所需的原因。对于您的应用程序或第三方SDK收集的每种类型的数据及其使用的API所需的原因类别,请在您的隐私清单文件中记录原因。

创建方法: 在Xcode 15以上版本中,创建新文件-->Resource-->PrivacyInfo.xcprivacy

privacymanifest.png

提供隐私清单中的数据使用描述

关于隐私清单的声明:

我们正在引入新的隐私清单——以单一标准格式概述应用程序中第三方代码的隐私实践的文件。当开发人员准备分发他们的应用程序时,Xcode会将开发人员使用的所有第三方SDK的隐私清单合并到一个易于使用的报告中。

这也就是要求App开发人员和SDK开发商都必须创建隐私清单,苹果将在应用程序发布时将其汇总在一起。

苹果要求SDK开发商这样做,因为将第三方SDK合并到其应用程序中的应用程序开发人员可能不知道这些SDK的所有代码和所有用途。隐私清单将帮助应用程序开发人员了解包含每个SDK的含义,并为他们提供创建应用程序的特定隐私营养标签所需的信息。

这就意味着,新的以隐私为中心的流程正在成为应用提交流程的一部分。

有了隐私清单,App Store 提交流程中将有几个新步骤。

1. 如何制作隐私清单

你必须声明你的应用(或其中使用的第三方SDK)是否使用应用追踪透明度框架定义的数据进行追踪。如果是,则必须将 NSPrivacyTracking 设置为 true。

以下是一个隐私清单的示例: examplemanifest.png

提醒一下,苹果将追踪定义为将你收集的数据与其他公司收集的其他用户或设备数据相关联。

定义如下:

追踪是指将从你的应用程序收集的用户或设备数据与从其他公司的应用程序、网站或离线资产收集的用户或设备数据相关联的行为,用于有针对性的广告或广告测量目的。追踪还指与数据代理共享用户或设备数据。 苹果提供了以下追踪示例:

  • 广告的行为定位
  • 与数据代理共享位置或电子邮件
  • 创建和共享受众
  • 设备图形生成

苹果提供了一些不被视为追踪的数据收集示例:

  • 数据保留在设备上
  • 仅用于欺诈检测/安全的数据
  • 用于信用评分的数据 据推测,还有更多类型的数据收集未被定义为追踪,只要你不将应用或SDK收集的数据与其他公司的数据相关联,或者不将你的数据出售给数据代理。

2. 如果你正在进行追踪,则必须在隐私清单中列出你正在收集的数据

首先列出要通过 NSPrivacyTrackingDomains 数组向其发送数据的域。这只是你的应用或SDK连接到的网址列表,有助于追踪。

重点一:

如果你连接到追踪域,但用户尚未通过应用追踪透明度授予追踪权限,苹果 将阻止对这些网址的任何调用。

如果用户未通过应用追踪透明度框架授予追踪权限,则对这些域的网络请求将失败,并且你的应用会收到错误。 --via 苹果 Developer

重点二:

由于你可能会收集一些正在追踪的数据和一些未追踪的数据,因此请确保你或你的衡量供应商具有用于不同目的的不同端点。换句话说,skan.vendor.com 和 tracking.vendor.com。苹果将阻止应用程序的追踪域,就像它通过ITP(智能追踪预防)阻止Safari中的追踪一样。但是,如果你愿意的话,此应用程序的 ITP 足够智能,可以区分虚拟域。

你还必须列出你正在收集的数据类型,并且你必须根据苹果定义的分类法进行。

3. 无论你是否按照ATT的定义进行追踪,你都必须在隐私清单中列出这些数据

你声明你的应用和任何第三方SDK收集了哪些数据。你还必须使用 NSPrivacyCollectedDataTypes 数组在隐私信息文件中列出有关该数据的详细信息。

苹果将要求你提供以下详细信息:

  • 你正在收集的数据类型
  • 是否与用户身份相关联
  • 是用于应用或SDK进行追踪
  • 以及你收集数据的原因

4. 无论你是否按照ATT中的定义进行追踪,你还必须报告你的应用和任何第三方SDK正在收集的数据类别

该数据将属于以下任何苹果定义的类别:

  • 联系方式
  • 健康与健身数据
  • 财务信息(信用卡)
  • 位置数据
  • 敏感信息(种族、残疾等)
  • 联系方式
  • 用户内容
  • 浏览历史记录
  • 搜索历史
  • 标识符
  • 购买记录
  • 使用情况数据
  • 诊断
  • 其他数据 ……

5. 无论你是否按照ATT的定义进行追踪,你都必须报告你的应用和任何第三方SDK收集数据的原因

这些原因可能包括:

  • 第三方广告
  • 自身的广告
  • 产品个性化
  • 应用功能
  • 任何其他目的

6. 创建隐私报告

当你构建应用程序以提交到App Store时,Xcode 15可以汇总应用程序项目中的所有隐私清单,并生成App及第三方SDK总结声明数据使用的隐私报告。要查看此信息,打开Xcode Organizer,显示存档的上下文菜单,然后选择“生成隐私报告”。

generateprivacyreport.png

privacyreport.png

提供“需要声明原因”的API的使用原因描述

2023年7月27日,苹果在开发者网站发布了公告:“需要声明原因”的API列表现已可用

其内容大致如下:

苹果致力于保护我们平台上的用户隐私。我们知道,有一小部分API可以被滥用,通过指纹识别来收集有关用户设备的数据,这是我们的开发人员计划许可协议所禁止的。为了防止这些API被滥用,我们在WWDC23上宣布,开发人员需要在其应用程序的隐私清单中声明使用这些API的原因。这将有助于确保应用程序仅将这些API用于其预期目的。作为此过程的一部分,你需要选择一个或多个经批准的原因,以准确反映你的应用程序如何使用API,并且你的应用程序只能出于你选择的原因使用API。

从2023年秋季开始,当你将使用需要原因的API(包括来自第三方SDK)的新应用程序或应用程序更新上传到App Store Connect时,如果你没有在应用程序的隐私清单中提供已批准的原因,你将收到通知。从2024年春季开始,为了将你的新应用程序或应用程序更新上传到App Store Connect,你需要在应用程序的隐私清单中包含已批准的原因,以准确反映你的应用程序如何使用API。

如果你有一个API的用例,其必要原因尚未被批准的原因所涵盖,并且该用例直接使使用你的应用程序的人受益,请告诉我们。

这要求App开发者和第三方SDK开发者自查App中使用API是否在此列表中,如果在,是否符合苹果要求的“声明原因”。

  • 从2023年秋季开始,如果您将应用程序上传到App Store Connect,该应用程序使用了“需要声明原因”的API,而当你使用该API的原因而不在其隐私清单文件中描述原因,您将收到一封来自苹果的电子邮件。从2024年春季开始,没有在其隐私清单文件中描述其使用需要声明原因API的应用程序将不会被App Store Connect接受。

  • 您的应用程序或第三方SDK必须声明一个或多个经批准的原因,以准确反映您对每个API的使用及其使用数据。您只能出于声明的原因使用这些API及其使用数据。这些声明的原因必须与向用户展示的应用程序的功能一致,并且您不得使用API或派生数据进行追踪。

相关API列表

API列表和符合要求的“声明原因”会不断更新,目前API列表包含:

如何添加相关API“声明原因”描述

NSPrivacy数组中的每个字典都需要包含以下键和值:

NSPrivacyAccessedAPIType:标识应用程序使用的必需原因API类别的字符串。您提供的值必须是API个节中列出的值之一。

NSPrivacyAccessedAPITypeReasons:识别您的应用程序使用API原因的字符串数组。您提供的值必须是与访问的API类型相关联的值。

举例说明,如果我们的App中使用文件时间戳相关API,则需要在字典中添加NSPrivacyAccessed作为键,其值必须是DDA9.1C617.13B52.1中的一个。

对于这三个值的描述如下:

DDA9.1

声明此原因,以向使用设备的人显示文件时间戳。

由于这个原因访问的信息或任何派生信息不得在设备外发送。

C617.1

声明此原因以访问应用程序容器、应用程序组容器或应用程序的CloudKit容器中文件的时间戳。

3B52.1

声明此原因,以访问用户特别授予访问权限的文件或目录的时间戳,例如使用文档选择器视图控制器。

注意:如果你使用了文件时间戳相关API,但是你使用的原因不属于以上任何原因,那么你只能选择去掉相关功能,或者向苹果提交新的批准原因的请求,待苹果认可的提供的原因并更新到文档后方可使用。

相关问题

  1. 获取 IDFV 算不算追踪?

单独使用IDFV不属于追踪行为

  1. 如果你没有追踪,但使用的是“需要声明原因”的API,是否仍必须在隐私清单中声明它?

  1. 什么是影响隐私的“需要声明原因”API?

View list of APIs and approved reasons

  1. SDK是否会像应用提交流程一样有自己的SDK提交流程?

  1. ATT在iOS 17中会发生变化吗?

  1. 在iOS 17和隐私清单下,营销人员对自己指向自己应用的Web链接的深度链接管理和衡量是否会发生变化?

哪些SDK必须提供隐私清单

细心的苹果官方明确列出了需要提供隐私清单的SDK名单,我们可以对照名单自查:

即将发布的第三方 SDK 要求

即将发布的第三方 SDK 要求 - 支持 - Apple Developer.png

可以看出,这里有很多我们十分熟悉的SDK,AFNetWorking、KingFisher、SDWebImage、OpenSSL等。其中有些已经更新了PrivacyInfo.xcprivacy,但更多的还没有更新,AFNetWorking甚至已停止维护,要继续使用这些SDK,要么等维护者更新,要么自己按要求生成。对于迟迟不更新的SDK已经有很多issue了,相信大家都遇到同样的问题,后续也肯定会有解决方案。

总结

目前来说,如果我们的App不符合新隐私政策的要求,在提交App到App Store Connect时仅会收到邮件警告,但到了2024年5月1日以后会被直接拒绝。

参考