大多数浏览器和
Developer App 均支持流媒体播放。
-
GDPR 和 CloudKit
《一般数据保护条例》(GDPR) 这一欧盟法规要求开发者让用户能够查看和控制您代表他们储存的个人数据。了解如何使用新增和现有的 CloudKit API 来在您的 app 中内置隐私保护功能,确保客户能够行使 GDPR 权利。
资源
-
下载
大家好 我是 Michael Ford 我是 CloudKit 团队的工程师 今天我们将讨论 GDPR 和 CloudKit GDPR 代表通用数据保护条例 这是一项于 2018 年 5 月 25 日 生效的欧盟条例 该条例的重点是 让用户得以了解并控制 公司如何使用他们的个人数据 Apple 十分重视用户隐私 我们希望确保开发者 拥有他们需要的工具 能够在保护用户隐私的同时构建优秀的 App 在本次讲演中 我们将讨论新的和现有的 CloudKit API 你可以使用这些 API 来满足与 GDPR 或其他条例相关的用户需求 如果你对更广泛的隐私讨论感兴趣 请观看来自 WWDC 2018 的 “更好的隐私 更好的 App” 会议视频 现在 你可能会问 “为什么我们只讨论 CloudKit API 呢” 让我们首先来谈一谈开发者可以使用的 iCloud 同步服务 你很快就会知道原因 作为开发者 你可以使用 iCloud 云备份 键值存储 iCloud 云盘和 CloudKit 将用户数据保存到 iCloud 中 让我们讨论它们的数据隔离 数据交互和 API 可用性 对于备份 键值和 iCloud 云盘 数据总是为单个用户存储 CloudKit 为开发者提供了更灵活的 API 你可以在用户之间共享数据 或者让所有用户都可以使用数据 当用户启动了 iCloud 云备份还原时 已保存的 App 数据将自动恢复 存储在键值存储和 iCloud 云盘上的 App 数据将在用户 登录到其 iCloud 账户的 所有设备之间自动同步 与此相反 App 保存到 CloudKit 的数据 不会自动镜像到其他设备 你可以使用 Fetch Changes API 或 Query API 访问 存储在 CloudKit 中的所有或部分数据 备份 键值和云盘 API 仅在设备上可用 你可以在设备上使用 Objective-C 或者 Swift 版本的 CloudKit API 也可以使用 CloudKit web 服务 从浏览器访问 CloudKit 数据 如你所见 CloudKit 是独一无二的 它更灵活 且有更多方式与之互动 在执行 GDPR 的请求 将数据保存到 iCloud 云备份 键值存储或 iCloud 云盘时 你可以像处理 App 本地存储的 其他数据一样处理数据 然而 使用 CloudKit 你可能需要与服务器交互 以完成 GDPR 的请求 现在 当我们更深入地谈论 GDPR 时 我希望你们记住 我是一名工程师 而不是律师 如果你对 GDPR 的合规有疑问 请咨询律师 那么 让我们讨论一下 GDPR 保障的一些用户权利 GDPR 保证用户有权知道 他们的哪些数据被存储并被如何使用 用户有权访问关于他们的存储数据 有权导出数据 用户可以请求 暂停对其数据的处理 也可以请求删除他们的数据 这些都是理所当然 却被遗忘的用户权利 如果关于用户的某个数据不正确 用户应该能够更新它 用户还应有权对数据的使用方式提出反对 例如 反对直接营销 或反对以科学研究为由 处理用户数据 最后 如果自动的设定可能对用户 造成法律上或实质上的影响 那么用户应该能够人为干预 这个列表相当的长 今天 我们将重点讨论 那些广泛适用于 使用 CloudKit 的开发者的权限 这不是关于 GDPR 合规的全面讨论 相反 我们将关注 如何使用新的和现有的 CloudKit API 来满足与 GDPR 或 其他条例相关的用户请求 让我们首先回顾一下 CloudKit 内部的一些概念 最高层是 CloudKit 容器 你可以让多个 App 与同一个 CloudKit 容器交互 在一个 CloudKit 容器中 有三种数据库类型 私人数据库 共享数据库 以及公共数据库 每一个 CloudKit 容器中 都有一个公共数据库 默认情况下 所有用户都可以 在公共数据库中读写数据 每个用户在一个容器中 都有自己的私人和共享数据库 私人数据库中的数据属于该用户 如果你的 App 支持共享 当用户接受共享邀请时 数据将在共享数据库中可见 这是对所有者的私人数据库的引用 实际数据仍驻留在该数据库中 在给定的数据库中可以有多个区域 在私人数据库和公共数据库中 总是有一个默认区域 在私人数据库中 你可以创建多个自定义区域 在共享数据库中 当你接受共享邀请时将区域才将显示 区域中的下一层则是记录 这是存储实际数据的地方 总结一下 CloudKit 的概念层级结构 首先是一个容器 然后是三种类型的数据库 在数据库中 你可以根据数据库的类型 有一个或多个的区域 最后 记录是数据存储的地方 现在我们已经回顾了 这些核心的 CloudKit 概念 我们可以将重点放在单独的 GDPR 权限上了 我们将一起讨论访问和可移植性 要实现这些权限 你需要从 CloudKit 获取数据 对于删除 你需要从 CloudKit 删除数据 对于限制 你需要对 CloudKit 容器中的 账户应用限制 对于访问和可移植性请求 你应该为用户提供 存储在 CloudKit 中的数据的可见性 你还应该提供 以标准格式导出用户数据的方法 如果要导出图像 使用 JPEG 文件格式则是合理的 对于一般的结构化数据 根据数据的类型和大小 可以使用 JSON 或 CSV 你刚刚完成了数据的导出 虽然不需要导入数据 但如果这样做 你可能会获得一些用户 如果你已经在本地同步了所有数据 那么你只需从本地保存的数据 执行 GDPR 的访问或可移植性请求即可 如果没有导入数据 你就需要从 CloudKit 服务器获取数据 那么如何从 CloudKit 获取所有数据呢 在 CloudKit 的层级结构中 对于每个容器 每个数据库 你应该获取所有区域 然后查询所有记录 让我们回顾一些代码 了解如何做到这一点 首先 让我们设置容器 以及数据库变量 在本例中 我们将重点讨论私人数据库 接下来 我们将获取数据库中的所有区域 我们将迭代所有这些区域 并设置一个 query 你会注意到这个 query 只针对一个记录类型 因此你可能需要运行多个 query 你可以遍历所有记录类型 或者逐个枚举 我们将向始终为值为 true 的 query 传递一个 NSPredicate 以便获得给定记录类型的所有记录 然后我们将在数据库中执行 query 最后 当 query 返回时 你应该显示记录 或者将它们保存并导出 我刚刚向你展示了查询私人数据库中 所有记录的代码 共享数据库和公共数据库更为复杂 对于接受共享的用户来说 共享数据库是 所有者的私人数据库的部分视图 请记住 数据属于所有者 因此你应该只返回 受共享用户的相关数据 公共数据库也是如此 默认情况下 任何用户都可以读写 公共数据库中的数据 同样你应该只返回 与发出 GDPR 请求的用户相关的数据 删除是不可逆的 你应该确保用户 确实想要大量删除他们的数据 你也可以提供一个限制 作为后备方案 如果用户确认要删除数据 则需要从 CloudKit 删除用户的所有数据 现在让我们看看它的代码 同样 我们需设置容器 和数据库变量 我们将关注于私人数据库 获取数据库中的所有区域 现在 我们将从各个区域中 提取 zoneID 并使用它们创建删除操作 这个删除操作将传入 你想要删除的记录 zoneID 最后 我们对数据库执行删除操作 我们看到了删除私人数据库中 所有区域的代码 同样地 如果你的 App 支持共享 那么这次则需要有选择性的删除 删除共享数据库中的记录 将删除所有者和共享中 所有其他参与者的记录 如果数据应该以这种方式删除 则应在删除区域之前 执行记录删除 完成之后 删除用户的共享数据库中的所有区域 与删除单个记录相反 这不会删除所有者 或共享中其他参与者的数据 事实上 共享数据库中的区域删除 将用户从共享的参与者 更改为被邀请状态 这意味着他们不再能看到 共享数据库中的区域 最后 在公共数据库中 你需要查看 与给定用户相关的存储数据 并确定哪些数据适合删除 最后 我们来谈谈限制 实际上 这是对用户数据进行暂停 或取消暂停处理的一种方式 在 GDPR 下 当用户调用另一个权限时 你可能需要暂停处理 或者在某些情况下 用户可能要求你 限制他们的数据 而不是删除它 我们已经公开了两个新的 web 服务 API 你可以使用它们来限制账户 或取消对账户的限制 只要你有适当的凭证 你可以从任何版本的 iOS 中 调用这些 web 服务 API 现在让我们讨论一下限制用户的代码 首先 你需要在 CloudKit Dashboard 中 生成一个 API 令牌 获得了 API 令牌之后 你就可以创建 fetchAuthorization 操作 fetchAuthorization API 最早是在 iOS 9.2 发布的 有了 apiToken 和 webToken 你就可以进行 web 服务的限制调用 我们已经把它们引入 一个 restrict() 函数中 我们现在来看一下 首先 你需要对 webToken 进行 URL 编码 通过组合 baseURL apiPath 和 query 参数 来创建完整的 web 服务 URL 完成之后 你应该将请求作为 HTTP post 发送到 CloudKit 服务器 我们将不再详细介绍这个代码 但是你可以在链接文档中找到它 一旦用户被限制 对该容器的任何操作 都会导致 managedAccountRestricted 错误 如果用户通过 Apple 限制了 iCloud 账户 你也会看到这个错误 Apple 将停止处理用户的数据 并对任何 CloudKit 请求 返回这个错误 所以你需要确保能够在代码中处理这个错误 回顾一下 为了访问和可移植性 返回用户的私人数据库中的所有数据 对于共享数据库和公共数据库 决定返回哪些数据给用户时 需要留意 为了响应用户的删除请求 你可以删除用户的 私人数据库中的所有数据 你还可以删除共享区域 从而移除受共享的用户 对于公共数据库 在决定要删除哪些数据时要注意 最后 我们引入了新的 web 服务 API 来限制账户或取消对账户的限制 如果你限制了用户 或者用户请求 Apple 限制其 iCloud 账户的处理 你将会看到 managedAccountRestricted 错误 有了这些工具 我们知道你一定可以在 App 中 建立很好的隐私保护 要了解更多信息 请访问 developer.apple.com 如果有任何问题或反馈 请发送电子邮件至 cloudkit@apple.com
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。