CloudKit在不同的iCloud帐户之间共享数据,但不与所有人

时间:2015-07-27 18:04:35

标签: ios objective-c icloud cloudkit

在我的应用程序中,我想通过iCloud与其他iCloud用户共享数据,但不是与全世界共享数据,而是与选定的其他iCloud用户共享数据。

我想到了一种可行的方式,但我不确定它是否会起作用,如果我忘记或误解了一些事情。

假设用户A希望能够与其他iCloud用户共享字符串,但不能与所有人共享。因此,用户A希望向用户B共享“Hello World”,但不向用户C而不是用户D。

所以我的应用程序有一个公共数据库和一个记录类型,每个人都一样。在该记录类型中,有一个String类型的字段,对每个人来说都是相同的。

现在用户A将记录“Hello World”保存到iCloud。这就是诀窍:我会在字符串中添加一个像UUID这样的唯一标识符,以便将“Hello World1230ABD6-3C61-1234-802E-D866F09AC012”等内容上传到iCloud。

现在用户A需要告诉用户他想要用他的UUID共享数据,因此用户A告诉用户B.现在用户A的UUID将作为谓词添加到用户B的CKSubscription。 / p>

这将允许用户B从用户A获取字符串,但是用户C或用户D不会收到CKNotification,因为他们的CKSubscription中没有用户A的UUID。

这会起作用吗?或者是否有其他设计模式允许通过iCloud与其他iCloud帐户共享/同步,但不是与所有人(公共)共享/同步?

P.S。我想要共享的数据不敏感,因此它不需要非常安全。数据对每个人(公共)都不感兴趣,因此只需要与选定的其他iCloud帐户共享...

我很感谢有关如何实现这一目标的任何想法或提示!

由于

2 个答案:

答案 0 :(得分:12)

有几种方法可以实现这样的目标。在所有情况下,它归结为:

  • 添加一个CKReference字段,该字段将填充您要与之共享的用户的ID。
  • 确保您的谓词将过滤该ID为您的CKReference字段(与您分享)

存储CKReference的位置和方式取决于您希望如何共享。

  • 如果您只想与一个人共享,那么只需将CKReference字段包含在您的主记录类型中即可。不要像在问题中所述那样将其添加到邮件中。添加一个额外的字段。
  • 如果您想与有限数量的人分享,那么您可以在recordType中添加一个字段,该字段是CKReference的列表。
  • 如果您想与一大群人共享,那么您可以添加一个group recordType,它将具有groupID加上groupMembers recordType,您将存储属于该组成员的所有用户CKReference ID。

在所有情况下,解决方案都是安全的。这一切都归结为您在应用中定义的谓词。如果您的某个谓词过滤器不正确,那么可能会发生有人看到不适合他的内容。

EVCloudKitDao的演示应用程序中,是一个基于CloudKit的聊天应用程序。它正在使用便利库EVCloudKitDao,但共享内容的结构将类似。

答案 1 :(得分:6)

CloudKit Sharing在WWDC 2016上推出。这允许在一组已知用户之间共享私人数据库记录,这听起来就像您正在寻找的那样。    ...... “CloudKit中的新功能”会话中有一个很好的概述:https://developer.apple.com/videos/play/wwdc2016/226/