CloudKit - Public 和私有数据库 - 消息传递平台

CloudKit - Public and Private database - messaging platform

过去 2 小时我一直在尝试 Google 这个,但发现几乎没有任何用处。 假设我想在 CloudKit 平台上创建一个带有联系人的消息传递应用程序。

您为用户使用 public 数据库。假设您可以通过电子邮件地址在平台上搜索人员。所以电子邮件是存储在 Users 记录类型中的 public 信息。但是,此用户也有只有接受的联系人才能看到的秘密信息。您邀请他成为您的联系人,该联系人保存到 Public 数据库并发送某种通知。

现在怎么办?您如何共享有关用户的秘密信息,例如 phone 号码,或者,比方说,他的所有联系人。 CKShare好像没有解决这类问题。另外,如果我私下给对方发消息,这条记录保存在哪里?进入 public 数据库?嗯

当然,我可以将其全部保存在 public 数据库中,但它如何安全?如果应用程序可以,那么有人不能获取数据吗? 我阅读了有关加密数据的信息,但对我来说这听起来像是很多工作和混乱,甚至不知道如何按需共享密钥。

您有权将 public 信息存储在 public 数据库中。

以及您私人数据库中的秘密私人信息。当您建立联系并希望与其共享更多数据时,您可以使用 CKShare linked 与个人共享您的秘密私人信息。

这有点令人困惑,因为您想象您的联系人列表和秘密信息保存在您设备上的数据库中,但事实并非如此。所有这些都是远程持有的,作为查看其他人的私人数据库中保存的秘密私人数据的权限。

同时您需要将 link 保存到您的私人数据库中您的朋友同意与您共享的共享私人信息。去年年底,我构建了一个使用这种方案的应用程序。在其中你可以拍照,它存储在你的私人数据库中,你将 link 发送到所述照片的 ckshare 到用户列表,然后他们可以访问它。案例中的照片是秘密的私人信息。

在我看来,Apple 将其称为 "Public" 数据库 确实是搞砸了,因为它实际上并不是 public

您在 Public 数据库中的 CloudKit 数据只能通过几种方式访问​​:

  • 授权用户: App Store Connect 用户可以被授予访问权限,通过 Apple 的 CloudKit API 调用您的容器。通常这只是您的 Apple ID,也可能是同事的。
  • Web 服务器: 如果安装了服务器到服务器密钥,则可以调用 Public 数据库。
  • 网页: JavaScript 代码可以从您在 CloudKit 仪表板。

所以不要认为它可以让任何人在任何地方使用。对于苹果来说,如果将其作为默认架构来实施,那将是一个荒谬的架构。 Apple 的 Public 数据库意味着它 可以 通过授权渠道 访问 任何安装您的应用程序的用户。

除此之外,您可以将描述的所有信息存储在 Public 数据库中。对于消息传递应用程序,人们将需要查找其他人并可能与系统中的任何人进行通信。所以所有的数据都必须在同一个地方。

CKShare 并不是真正为支持这样的共享数据而设计的。它更适合与一组人共享特定文档。通过 CKShare 共享的记录应被视为临时共享。如果用户删除您的应用程序或删除共享,所有参与者将立即失去访问权限。如果您希望数据继续存在(例如在聊天室中),那么您需要通过将其存储在 Public 数据库中并授予用户访问权限来使其独立于用户。

我建议创建您自己的 User recordType,因为无法查询 Apple 的默认 Users recordType(ID/recordName 除外)。因此,如果您将 email 字段添加到 Users recordType,您将无法通过电子邮件查找用户。相反,创建您自己的 User 类型,您将能够按 email 搜索所有您想要的。

希望对您有所帮助。我会继续您的 Public 数据库实施。您将不得不手动管理共享和订阅记录,但这与使用 CKShare 的工作量相同(但更灵活)。祝你好运!