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

Mar*_*in. 2 ios icloud cloudkit

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

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

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

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

Cli*_*rum 6

在我看来,Apple 称其为“公共”数据库确实很愚蠢,因为它实际上并不公开

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

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

所以不要认为它可以让任何人在任何地方使用它。对于 Apple 而言,将其作为默认实现将是一种荒谬的架构。Apple 的公共数据库只是意味着任何安装您的应用程序的用户可以通过授权渠道访问它。

这样一来,您就可以将您描述的所有信息存储在您的公共数据库中。对于消息传递应用程序,人们将需要查找其他人并可能与系统中的任何人进行交流。所以所有的数据都必须在同一个地方。

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

我建议创建自己的,User recordType因为Users recordType无法查询Apple 的默认值(除了 ID/ recordName)。因此,如果您在 上添加了一个email字段Users recordType,您将无法通过电子邮件查找用户。相反,创建您自己的User类型,您将能够根据需要进行搜索email

我希望这有帮助。我会继续推进您的公共数据库实现。您必须手动管理共享和订阅记录,但这与使用的工作量相同CKShare(但更灵活)。祝你好运!