返回

Apple 隐私清单与App Store隐私详情:全面解析

IOS

理解 Apple 隐私清单与 App Store Connect 隐私详情

在 Apple 生态系统中,保护用户隐私始终是一项重要任务。为了加强这种保护,Apple 引入了隐私清单 (Privacy Manifest),这是一个需要集成到应用中的新机制,用以声明应用的隐私实践。这引发了一个常见问题:隐私清单与 App Store Connect 中要求的应用隐私详情有什么不同?本文将深入探讨二者的差异,并提供应用开发中的最佳实践方案。

差异分析:清单 vs. 详情

App Store Connect 隐私详情 ,开发者需在应用商店上传应用之前填写。这个部分的主要目的是让用户在下载应用之前,清楚了解应用将如何处理用户的数据。 这些声明是在应用商店页面公开展示的,属于“静态声明”。开发者需回答一系列关于数据收集、用途和是否关联用户身份的问题。

隐私清单 (Privacy Manifest) 则是一个直接嵌入在应用包中的文件,文件名通常是PrivacyInfo.xcprivacy。 这个清单并非一个展示给最终用户的文件。它采用程序可读的形式,目的是在编译阶段和应用运行期间,由系统自动分析应用的行为,进行数据处理的动态检查 。它让 Apple 可以自动检测应用的某些行为是否符合声明,从而更好地保证开发者对用户数据的负责。简单来讲,它是在编译阶段使用的,通过一种标准的方式来传递App的隐私使用情况给苹果,并且将来有可能用它来在运行期间进行更深入的安全分析。

概括地说,隐私清单关注应用的 实际 数据使用,而 App Store Connect 的隐私详情则关注对 用户告知 *。尽管两者的目的是提高隐私透明度,它们所使用的手段与时机却不同。二者都需要,是苹果强制要求的* 。

核心差异与联系

两个系统的主要差别可以从几个方面阐述:

  1. 作用目标 : App Store Connect 隐私详情面向用户,是信息展示,隐私清单面向系统,是机器解读。
  2. 声明时机 : 前者在上传应用商店之前填写,后者在编译阶段。
  3. 验证机制 : 前者主要依赖人工审核,后者允许系统自动验证。
  4. 灵活性 : App Store Connect 隐私详情相对静态,一旦发布就无法在不更新版本的情况下修改。隐私清单更易于随应用代码的变化而更新。

两个系统的联系在于, 它们都在强化 Apple 对用户隐私保护的策略,二者也互为补充 。你所做的App隐私操作(隐私API的使用),需要先通过隐私清单声明给苹果系统(未来可能会做运行时的检查),而你的隐私实践的结果也需要通过应用商店的页面明确展示给用户 ,这是两种不同用途的声明方法,二者都需要而且不可替代。

如何处理隐私清单

操作步骤

  1. 在Xcode中创建或选择一个项目,

  2. 选择 "File" -> "New" -> "File",

  3. 在iOS 资源 (Resources)部分,找到 “App Privacy Information”,并选择。 文件名将被默认为 "PrivacyInfo.xcprivacy"。

  4. 使用 Property List编辑器 编辑此文件,需要使用 Apple 的密钥来配置清单信息,如NSPrivacyTracking, NSPrivacyAccessedAPICategories等。 这些键值的意义是详细声明App在特定情况下如何使用用户的隐私权限,使用方式可以查询Apple的官方文档。例如以下简单的配置说明:

<?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>NSPrivacyTracking</key>
	<dict>
		<key>NSPrivacyTrackingDomains</key>
		<array>
			<string>your_domain_for_tracking</string>
		</array>
        <key>NSPrivacyTrackingPurposes</key>
		<array>
            <string>Purposes for use for tracking user or device information</string>
        </array>
    </dict>
	<key>NSPrivacyAccessedAPICategories</key>
	<array>
        <dict>
             <key>NSPrivacyAccessedAPICategory</key>
             <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
             <key>NSPrivacyAccessedAPITypes</key>
             <array>
                 <string>UserDefaults usage here</string>
             </array>
          </dict>
          <dict>
              <key>NSPrivacyAccessedAPICategory</key>
              <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
              <key>NSPrivacyAccessedAPITypes</key>
              <array>
                 <string>File access usage here</string>
             </array>
          </dict>
         <dict>
              <key>NSPrivacyAccessedAPICategory</key>
              <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
              <key>NSPrivacyAccessedAPITypes</key>
              <array>
                   <string>Use BootTime here</string>
             </array>
           </dict>
          <dict>
                <key>NSPrivacyAccessedAPICategory</key>
                <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
                <key>NSPrivacyAccessedAPITypes</key>
               <array>
                     <string>Get device Disk Space here</string>
              </array>
         </dict>
    </array>
</dict>
</plist>
  • NSPrivacyTracking:包含有关应用程序的跟踪活动信息。例如:
  • NSPrivacyTrackingDomains: 应用程序可能使用的跟踪域名
    *NSPrivacyTrackingPurposes: 详细说明你如何使用这些数据进行用户跟踪的用途。
  • NSPrivacyAccessedAPICategories:声明使用哪些需要访问权限的 API 类别。 这需要对Apple 隐私保护策略下的保护API的访问权限详细声明,方便Apple进行检查。例如上文中提到的UserDefault,文件读取等权限的详细说明,以便开发者知悉具体需要声明的具体API。 完整的列表需要查阅苹果开发者文档。

安全建议

  • 及时更新 : 随着Apple政策变化,要及时检查并更新PrivacyInfo.xcprivacy的内容。
  • 代码审查 : 在开发过程中,仔细检查代码,确定使用了哪些可能影响用户隐私的API和数据。 确保所有使用行为都在隐私清单和 App Store Connect 的隐私详情中有声明。
  • 数据最小化原则 : 遵守“数据最小化”原则,仅收集绝对必要的数据,不要获取过多不必要的信息,降低安全风险。
  • 测试 :在实际运行的设备上测试应用的行为,检查是否和PrivacyInfo.xcprivacy文件的相符,如果不同则修改隐私清单的内容。

总结

隐私清单的引入是苹果在保护用户隐私方面采取的又一重要措施。开发人员应将其视为流程的一部分,细心理解隐私清单的规则和 App Store Connect 的要求,并在应用的生命周期中进行定期审核与维护。这样不仅符合App Store的政策,同时也是对用户隐私的负责体现。