
-
将隐私保护融入开发流程
从规划阶段到部署,了解如何在你的 App 中内置隐私保护功能。我们会介绍在开发生命周期各个阶段整合隐私保护功能的实用方法,重点关注数据最小化、设备端处理以及透明度和控制权。探索如何使用 Apple 丰富的工具和框架来保护用户数据,打造尊重隐私的 App 体验。
章节
- 0:00 - 简介
- 0:38 - Apple 对隐私的看法
- 3:47 - 规划
- 7:13 - 设计
- 9:27 - 开发:用户界面
- 12:48 - 开发:客户端加服务器
- 18:20 - 开发:本地资源
- 20:46 - 测试
- 22:28 - 部署
资源
- AdAttributionKit
- Configuring app groups
- Explore the Human Interface Guidelines for privacy
- Privacy manifest files
- Swift Homomorphic Encryption
相关视频
WWDC25
WWDC24
WWDC23
WWDC22
WWDC21
-
搜索此视频…
大家好 我叫 Joey Tyson 是 Apple 的隐私工程师 当你构建依赖于 用户数据的 App 时 数据的强大力量使得 将隐私保护集成到开发流程中 变得至关重要 在 Apple 我们认为隐私 不仅仅是一个流行词汇 每个人都有权让自己的数据 得到谨慎且尊重的处理 在这个视频中 我很高兴地 回顾了 App 开发的关键阶段 并分享了在每一步中 融入隐私保护的实用方法 不过 首先我将回顾一下 “隐私”的含义 2010 年的一次会议上 Steve Jobs 将隐私描述为: 让用户能够以通俗的语言 反复了解自己 所注册的服务 换句话说 用户能够理解 并信任你处理自身数据的方式 这意味着用户的期望或意图 与你实际的做法 是一致的 Steve 还表达了他的乐观态度: 如果你能建立这种理解 用户就能够针对自己的数据 做出正确的选择
他指出 有些人比其他人 更愿意分享数据 每个人在做这类选择时 都会带入自己的特定情景 而不应由其他人 来代表他们做假设 事实上 要始终符合用户的意图 最好的方法之一就是 直接询问他们 无论你如何定义隐私 有三个关键概念始终存在 首先 隐私关乎人 关乎人与技术的互动方式 以及技术对人的影响 更具体地说 这涉及处理用户数据 所产生的影响: 你如何利用所了解的 App 用户信息来开展工作 最后 在决定要做什么时 你需要考虑信息的情景 尤其是信息所涉及 对象的期望和偏好 当你被委托处理某人的数据时 隐私意味着尊重这类情景 了解用户的信息可以 帮助你为用户创造令人兴奋的 个性化体验 然而 如果这些信息的使用方式 超出了用户的预期 或这些信息在新的情景下被分享 就可能对用户的生活产生 重大的实际影响 当用户使用你的 App 来实现自身目标时 App 的工作方式应该 符合用户的预期或选择 包括如何利用数据 来实现这些目标 Tim Cook 曾表示 Apple 的隐私保护方法 包括尽可能少地 收集用户数据 然后在处理数据时 保持谨慎且尊重的态度 他强调 我们不仅 要问自己能做什么 还要问为了用户的 最大利益应该做什么 这一观点构成了 Apple 的隐私保护支柱: 数据最少化、设备端处理、 透明度与控制权 以及安全保护 现在 我将通过 App 开发 环境中运用隐私思维 让这一理念更加实用 Apple 的所有平台 都包含许多技术 可帮助你在 App 中 实现出色的隐私保护 这些只是我将 在本视频中与你分享的、 用于将隐私保护集成到 开发流程中的部分工具
无论你在软件开发生命周期中 采用何种模式 它很可能都涵盖 以下五个简化阶段: 规划、设计、 开发、测试和部署 我将逐一介绍这些阶段 并向你展示在每个阶段中 构建出色隐私保护的机会 我还将分享 Apple 平台上 支持你实现隐私目标的工具 以及一些隐私要求
首先 我将谈谈规划阶段 这是你开始撰写 App 隐私保护故事的地方 为了在 App 中实现最佳隐私保护 即在处理用户个人数据时 与用户的意图 保持高度一致 隐私保护应该从一开始 就成为开发的一部分 与安全性或本地化一样 事后再添加隐私保护 会困难很多 在 Apple 我们从定义 隐私保证开始规划工作 即概括性地阐述 我们希望用户 在隐私方面 对我们产品的期望
这些产品描述不仅 为实现你的隐私目标 提供了具体的工程要求 还能帮助你与 App 用户沟通 这些目标
在 Apple 中 我们使用我之前 提到的隐私保护支柱 来帮助指导 我们制定隐私保证 为了说明这一过程 假设我正在开发 一款名为“Pal About”的 App 用于查找附近的景点 并与朋友分享景点照片
数据最少化意味着 只使用实现 与用户期望高度一致 所需的数据 这样可以提高效率和建立信任 特别是在 收集数据进行分析时 请仔细考虑你试图解决的问题 或你尝试回答的问题 并确保你的数据收集 与这些用例相匹配 对于我的 App 我要定义的一项保证 是“我们只保留 汇总使用数据” 数据最少化还反映了 一种强默认设置的方法 即构建从对用户隐私选择 假设最少的体验开始 在我的 App 中 我可能会 向用户保证“搜索附近的地点时 默认不存储当前位置” 我之前提到过 隐私涉及某人信息的情景 设备端处理是尊重 这一情景的关键方式 每当数据从一个情景 跨越到另一个情景时 例如从设备到服务器或 在两个不同的 App 之间 请仔细考虑 这种流动是不是必要 以及它对用户的隐私有何影响 回到我的“Pal About”App 我可以这样写: “建议的聚会地点仅使用 设备端数据在本地生成” 在规划好强默认设置 并维护了情景后 就数据的使用方式设定预期 并提供自定义体验的选项 在提供超出默认设置的 数据共享选项时 要确保这些选择 能带来明确的价值回报 尤其是在开发 AI 功能时 请告知用户何时使用了 AI 并让用户能够 对相关数据流做出决策 例如数据是不是 能用于训练模型 为了在我的 App 中实现隐私保证 我可能会决定 “你上传的照片仅在 你选择优化智能功能时 用于训练生成式模型” 最后 安全保护 有助于维持对数据流的限制 以避免造成伤害 这意味着 只要有可能 隐私就应该由技术控制提供支持 也就是说 系统应原生维护隐私 即使其他部分最终 无法按预期工作 在我的示例 App 中 我可以说: “我们无法读取设备间 传输给朋友的信息” 并通过使用端到端加密的架构 来为这一目标提供支持 现在 我将关注设计阶段 构建用户与产品实际交互的方式 出色的设计能让你 与 App 用户沟通 并科普隐私知识 而不会让用户感到繁琐 当用户信任 App 处理数据的方式时 就更有可能深度使用产品 并主动分享数据 下面分享几个 建立这种信任的 通用设计原则 首先 主动设定预期 用户绝不应在 App 收集的 数据或数据的使用方式上 感到意外 例如 Apple App 在首次启动时 会展示隐私要点摘要 并附带详细说明的链接 你也可以在 App 中 使用新手引导流程 帮助用户了解 App 如何使用数据
除了预先指导用户外 还要明确状态变化 也就是说 确保用户能够 即时了解可能影响自身隐私 或改变自身行为的 数据流变化 例如每次 Siri 激活时 iOS 上均会显示动画提示 同时每次启用麦克风时 屏幕顶部均会显示 系统指示器
最后 关于数据的选择应该 有意义且贴合情景 每个选项要么 显著影响 App 行为 要么附带对影响的清晰解释 将选项触发时机 与使用情景绑定 并研究何种粒度水平 能为受众提供恰当的平衡 例如 如果 macOS 版 “Pal About”包含 连接流媒体设备的功能 那么在用户主动 启用这项功能之前 不应尝试进行 任何本地网络连接 这清楚地说明了为什么 需要建立这些连接 以及系统为什么会显示 提示请求启用权限
如需进一步了解 隐私设计细节 请查看 Apple Developer 文档中的《人机界面指南》 完成隐私规划与设计后 就是时候编写代码了 你可以借助多种工具和技术 来实现隐私目标 下面将仅列举几个示例 重点介绍构建 App 时 如何使用这些工具
首先 我将介绍如何 在 App 用户界面中 简化隐私选择流程 访问日历或当前位置等设备资源 意味着跨情景共享敏感数据 因此 Apple 平台设计为 仅在符合用户意图时 共享这类数据 广泛的访问权限 对隐私的影响最大 因此请求这类权限时通常 会触发明确的许可提示 比如这个照片图库访问提示 如果用户仅想 分享几张照片 开放整个图库的访问权限 可能泄露远超用户预期的信息 这就是“限制访问”功能 允许用户仅选择 特定照片的原因 但你可以通过工具仅请求所需数据 打造更流畅的体验 由于用户通过这些流程 自主选择要共享的内容 用户的交互行为已隐含意图 因此不会额外触发提示 在我的示例 App 中 我希望用户上传照片 但可能无需访问整个图库 不过我可以使用 PhotosPicker 完全绕过照片图库提示 由于系统在进程外渲染选择器 App 仅接收用户实际选中的照片 全程不显示权限提示 你可以将选择器嵌入 App UI 并自定义它的外观 它甚至支持用户 从隐藏相册中选取照片 macOS 和 visionOS 等其他平台上 也有对应版本 有关更多信息 请观看 WWDC23 视频 “在 App 中嵌入照片选择器” Apple 还提供了其他安全 UI 元素来简化数据访问 回到我的 App 假设我想让用户 便捷地搜索附近地点 添加位置按钮后 用户只需 轻点一下即可共享当前位置 系统会验证按钮 是不是由用户交互触发 这有助于再次确保 位置共享行为符合用户意图 你可以自定义 这个按钮的外观和风格 使它与 App UI 更协调
当用户首次轻点 App 中的位置按钮时 系统会弹出提示框 确认用户的意图 并说明按钮的功能 同时屏幕顶部还会 显示定位指示器 与通过其他 API 分享 定位时的显示逻辑一致 但用户选择“好”后 后续轻点将不再触发任何提示 而是直接共享当前位置 有关更多详情 请观看 WWDC21 视频“了解位置按钮”
以上只是减轻 隐私 UI 认知负担的 两个示例 其他功能还包括: 联系人进程外选择器 UIPasteControl 按钮 以及硬件配件的简化设置流程 在使用通用 API 前 请先确认是不是存在仅获取 所需设备数据的方案 当然 某些情况下 可能仍然需要权限提示 为了让权限提示 更具意义且贴合情境 应在用户预期 会出现这类询问的 时机触发相关操作 避免在用户首次打开 App 时 显示这类选项 并在用途字符串中清楚地说明 出现这个提示的原因 接下来我将介绍 作为客户端-服务器 交互底层支持的隐私技术 具体来说 我将分享 在不向服务器暴露敏感数据的前提下 使用服务器资源的几种方法 以及在常见数据收集情景中 减少可识别数据需求的方案 在 Apple 平台上 高级数据保护功能 支持用户为 iCloud 中 存储的大部分数据 启用端到端加密 通过采用 CloudKit 当用户启用高级数据保护功能时 你也可以为 App 在 CloudKit 中存储的数据 启用端到端加密 且无需修改基础架构 或额外管理加密密钥 首先确保在 CloudKit 架构中 对所有字段使用加密数据类型 这包括默认的 CKAsset 字段 并且 CloudKit 中的大多数数据类型 都有加密变体 例如 EncryptedString
然后你可以使用 encryptedValues API 检索或存储 CloudKit 记录中的数据 所有加密和解密操作 都由这个 API 抽象处理 请注意 CloudKit 不支持 对加密字段建立索引 因此使用 CKQuery 和 CKQueryOperation 获取记录时 不要在查询条件或 排序描述符中包含加密字段 有关更多信息 请观看 WWDC21 视频“CloudKit 的新功能” Apple 使用的另一种加密技术 称为同态加密 这一技术无需对原始数据进行计算 而是允许在加密的 有效负载上执行计算 并且解密结果时能得到 与原始计算相同的输出 在计算过程中 数据时钟保持加密状态 通过结合使用加法等 简单计算操作 同态加密可以实现 隐私信息检索等 更高级的技术 借助 PIR 你可以从服务器查询数据 而查询内容或结果 在服务器端 始终保持加密 借助 PIR 设备向服务器发送 查询的加密有效负载 服务器会使用同态加密 来计算加密的结果 请记住 计算过程 本身是加密的 因此在请求的整个生命周期内 服务器始终无法以明文形式 获取与查询匹配的结果 最后 服务器将 加密结果返回设备 由设备本地解密处理 在“Pal About”App 中 我可以使用 PIR 从服务器 获取聚会地点的实时信息 同时避免服务器 跟踪用户的搜索历史记录 对部分用户而言 App 内的地点探索记录 可能影响自身安全 因此是否 在 App 中使用 PIR 成为重要的隐私设计决策 PIR 已在 Apple 平台功能 以及开发者的热门 App 中落地 有关实施 PIR 的更多详情 请查看 GitHub 上的 Swift 同态加密库和应用程序 有两种常见情景 看之下需要收集 可识别数据 分别是 反欺诈和广告归因 我将分享 Apple 打造的一些功能 帮助你在这些领域实现目标 同时减少基于用户 ID 或 IP 地址收集数据的需求 在反欺诈方面 私有访问令牌有助于 确保请求来自合法设备 同时不识别 设备使用者身份 设备通过验证后 会收到匿名令牌 你无需额外身份信息 即可验证这些令牌 有关更多详细信息 请观看 WWDC22 视频 “使用私有访问令牌 替代 CAPTCHA” 你可能还需要 防范 App 特有的欺诈行为 例如多次尝试 兑换促销优惠 DeviceCheck 是一个 API 可让你将最多 两位信息与特定设备关联 而无需跟踪设备标识符 这些状态由 Apple 维护 即便设备重新安装系统 或转移数据后也会保留 有关如何设置和检索 这些状态的更多详细信息 请观看 WWDC21 视频 “利用 App Attest 和 DeviceCheck 防范欺诈” 在广告效果方面 AdAttributionKit 是衡量 广告系列成效的强大工具 同时保护隐私 它通过用户设备 发送的签名回传信号 将 App 安装和用户回归 归因于特定广告系列 AdAttributionKit 还能进一步 帮助减少提示 调用 AdAttributionKit API 无需显示 App 跟踪透明度提示 对于发布商 App 关键实现步骤是 在 Info.plist 中添加 已注册广告网络的标识符 然后展示这些网络签名的广告 如需详细了解 AdAttributionKit 及它回传信号的工作原理 请观看 WWDC24 视频 “了解 AdAttributionKit” 对于所推广的 App 你需要在 App 内 注册转化事件 以及任何相关用户回归事件 此外 你还可以指定 用于获取回传信号副本的端点 Apple Developer 文档的 AdAttributionKit 部分包含 这些更新的所有相关 API 视频“AdAttributionKit 的 新功能” 详细介绍了 iOS 26 中的新功能 最后 我将介绍一些技巧 在维护隐私的同时 管理本地资源 例如设备端 AI 模型、 捆绑框架和 App 进程
首先 我将重点介绍 Core ML 的强大功能 Core ML 能够完全在设备端运行 甚至训练或微调机器学习模型 支持一系列开源模型 和使用 Create ML 创建的自定义模型 借助优化和压缩技术 你甚至可以运行 流行的大语言模型 而无需调用服务器 要开始使用 Core ML 请观看 WWDC24 的 “利用 Core ML 在设备端 部署机器学习和 AI 模型” 或“将机器学习和 AI 模型 移植到 Apple 芯片”视频 App 组容器不仅允许 你在自己构建的 不同 App 之间共享数据 还能帮助保护这些数据 在 macOS 上 未经用户许可 其他 App 无法访问 App 组容器中的数据 要使用这些容器 首先应在开发者门户的 “证书、标识符和描述文件” 下注册 App 组标识符 然后 你需要在 App 中 采用相应的授权 并在需要存储用户数据时 请求容器目录
有关更多信息 请观看 WWDC24 视频“隐私保护的新功能” 或参阅 Apple Developer 文档中的“配置 App 组” 同样在 macOS 上 请注意 当用户决定退出 App 时 所有 App 进程都应终止 如果使用 fork、exec 或 POSIX spawn 加载进程 请在退出时清理这些进程 macOS Tahoe 会试探性检测 这些进程是否继续运行 然后显示提示框以确认 这是否符合用户意图 请注意 用户随后可以 选择自行终止进程 最后 请记住 App 中包含的 所有代码都由你负责 包括第三方 SDK 在提交到 App Store 之前 SDK 可能需要隐私清单文件 描述所收集的数据 以及使用 API 的必要原因 有关这项要求何时适用的 更多详细信息 请参考 Apple Developer 文档中 的“隐私清单文件” 你还可以通过观看 WWDC23 视频 “隐私清单入门指南” 了解更多信息 这些技术只是 隐私如何成为 开发一部分的几个例子 但现在 我将转向下一阶段 那就是测试阶段 是的 隐私甚至是 这一步的一部分 正如你希望 构建测试来避免错误 或检测性能下降一样 构建测试以确认你 实现了 App 的隐私保证 是一项重要的最佳做法 在 Apple 我们采用 金字塔模型来思考测试 其中较小的测试为 更广泛的测试奠定了基础 而更广泛的测试更接近 反映用户使用 App 的实际目标 单元测试有助于 验证单个代码段 通常是单个函数 为了保护隐私 它们可以验证 支持隐私控制的 App 逻辑 集成测试针对 离散子系统或类集群 确保不同组件 协同工作正常 在隐私环境中 这些测试确保系统之间的 数据流动按预期工作 最后 UI 测试会观察 App 中面向用户的行为 确保这个行为确实如你所愿 这包括用户引导 或更改隐私设置等 常见情景 在我的“Pal About”App 中 我有一个隐私保证 即仅在用户选择 优化智能功能时 才将照片用于训练 因此 我会编写一个 UI 测试 确认更改选择设置 始终会更新相关数据流 Apple 提供了许多工具 来实现更高效的 隐私功能测试 例如 从 iOS 15.2 开始 你可以在“设置”中 启用“App 隐私报告” 快速查看 App 的 数据访问、传感器访问 和网络活动 并确保它们与 App 用户的 期望一致 最后 我将介绍部署 即实际将 App 推向世界的过程 在这一点上 你已经做了很多工作 来在你构建的功能中 提供出色的隐私保护 现在是时候分享你的隐私故事了 当你创建内容来推广 你的 App 时 你的隐私保证 可以成为激发用户兴趣 和让你的 App 与众不同的资源
在 App Store 上部署 还包括一些必需的步骤 帮助用户了解 你的 App 中可以期待什么 特别是 隐私标签 是 App Store 帮助用户 了解 App 隐私实践的关键方式 这个标签提供了 关于你的 App 传输到设备外的数据类型 以及如何使用这些数据的简明信息 在 App Store Connect 的 “App 隐私”部分 设置你的隐私标签 请务必查看 Apple Developer 文档的 “App Store 上的 App 隐私详细信息”部分 了解数据类型和“跟踪” 等术语的具体定义
当你在 Xcode 中归档构建时 从归档的上下文菜单中 选择 Generate Privacy Report 以获取隐私清单文件中声明的 数据使用情况的汇总报告 请注意 你的隐私标签 必须记录所有潜在的数据使用情况 即使用户选择是否收集这些数据 作为 App 体验的一部分也是如此 不过 请查看 Apple Developer 文档 以了解某些例外情况 例如一些反馈和报告流程 你可以随时更新 你的隐私标签 即使没有 App 更新也是一样 有关更多信息 请观看 WWDC22 视频 “创建你的隐私标签”
除了隐私标签外 确保满足部署的 其他隐私要求 你的 App 必须有明确的隐私政策 App 和所有第三方 SDK 的隐私清单 都应包含在 Xcode 中 访问设备资源的 任何权限提示 都需要目的字符串 你还可以在 App Store 列表中 添加“隐私选择”链接 以便用户进一步了解 如何在你的 App 中管理数据 例如用于访问、删除 或更新这类数据的门户 规划、设计、 开发、测试和部署 在这个过程的每一步 集成隐私保护 有助于为使用你 App 的 用户提供最佳体验 现在 是时候将这些想法 应用到你的流程中了 首先为你的 App 定义 明确的隐私保证 然后 运用设计原则 来向用户说明 数据使用和选择 借助扎实的技术基础 实现你的隐私目标 确保通过测试 实现隐私保证 最后 在与世界 分享你的隐私故事时 准备好相关的隐私标签 在本视频中我多次 提到数据最少化 但对于你在隐私保护上的投入 我的感激之情绝不会因此减少分毫 谢谢
-
-
10:29 - Create an inline Photos picker
// Create an inline Photos picker // Define the app's Photos picker PhotosPicker( selection: $viewModel.selection, matching: .images, preferredItemEncoding: .current, photoLibrary: .shared() ) { Text("Select Photos") } // Configure a half-height Photos picker .photosPickerStyle(.inline) .ignoresSafeArea() .frame(height: 340)
-
11:33 - Display the Location Button
// Display the Location Button LocationButton(LocationButton.Title.currentLocation) { // Start updating location when user taps the button. // Location button doesn't require the additional // step of calling 'requestWhenInUseAuthorization()'. manager.startUpdatingLocation() }.foregroundColor(Color.white) .cornerRadius(27) .frame(width: 210, height: 54) .padding(.bottom, 30)
-
13:48 - Encrypting data in CloudKit
myRecord.encryptedValues["encryptedStringField"] = "Sensitive value" let decryptedString = myRecord.encryptedValues["encryptedStringField"] as? String
-
-
- 0:00 - 简介
了解数据隐私在 App 开发中的重要性,以及如何将隐私保护融入整个 App 开发流程。这个视频介绍了在开发的各个步骤中为 App 融入隐私保护的实用方法。
- 0:38 - Apple 对隐私的看法
Apple 认为良好的隐私保护应当清晰、反复地向用户说明他们数据的处理方式,让他们能够根据自己的期望和偏好做出知情选择。Apple 尊重数据处理的背景,因为在受托处理用户数据时,相关背景至关重要。Apple 隐私保护的关键在于数据最少化、设备端处理、透明度与控制权,以及安全保护。
- 3:47 - 规划
有效的 App 隐私保护始于全面的规划。必须从一开始就将隐私保护纳入开发过程,因为后期才实施会面临更大的挑战。 在规划过程中,Apple 对隐私保证做出了定义,概要说明了用户的个人数据将如何处理。这些保证以数据最少化等原则为指导,也就是说,仅使用必要的数据,并实施尊重隐私的强默认设置。 App 需要清楚地传达数据的使用方式,提供自定选项,并确保任何超出默认设置的数据共享都能提供明确的价值。端到端加密等安全保护措施,对于实现隐私保护目标和限制数据流动以避免损害至关重要。
- 7:13 - 设计
有效的 App 设计需要就数据收集和使用与用户进行清晰的沟通并提供指导,这样才能建立信任。关键设计原则包括: - 通过用户引导流程和隐私摘要来主动设定预期 - 以显眼的形式清晰反映状态变化 - 根据当前操作提供相关且有意义的数据处理选项 请遵循这些原则,创建直观易用、用户友好且尊重用户隐私的 App。
- 9:27 - 开发:用户界面
Apple 平台非常重视隐私,并为此将数据共享限制在必要的范围内。你应使用 Apple 提供的隐私保护 API,让 App 符合这一要求。 例如:使用 PhotosPicker 选择特定照片,而无需访问整个照片图库;以及轻点一下位置按钮来共享位置。这些工具会暗示用户授予了许可,让操作更简单。
- 12:48 - 开发:客户端加服务器
Apple 为开发者提供了多种工具和技巧,以增强他们 App 的隐私保护。 - 启用“高级数据保护”后,CloudKit 会对存储在 iCloud 中的 App 数据启用端到端加密 - 同态加密允许对加密数据进行计算 - 私有访问令牌有助于确保设备请求合法 - DeviceCheck 可帮助防范欺诈活动 - AdAttributionKit 用于衡量广告系列是否成功,而无需显示 App 跟踪透明度提示
- 18:20 - 开发:本地资源
使用 Core ML 直接在设备端高效运行和训练机器学习模型。使用 App 组容器让 App 之间安全地共享数据。通过确保在退出 App 时终止 App 进程,避免用户提示。
- 20:46 - 测试
测试对于确保 App 能够履行自身隐私保证至关重要。Apple 使用由单元测试、集成测试和 UI 测试构成的金字塔模型来检验隐私控制、数据流动,以及面向顾客的行为。使用 App 隐私报告来帮助审查数据访问和网络活动,以确保符合顾客的期望。
- 22:28 - 部署
在部署阶段,应公开 App 的隐私措施并确保满足 App Store 的要求。在 App Store Connect 中配置的隐私标签可简要说明传输的数据类型及数据使用情况。其他关键要求还包括:明确的隐私政策、隐私清单,以及权限提示的目的字符串;并可选择性提供“隐私选择”链接,以帮助用户管理数据。