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

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

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

假设用户A希望能够与其他iCloud用户共享一个string,但不能与所有人共享。 因此,用户A想要将“Hello World”分享给用户B,而不是分享给用户C,而不是分享给用户D.

所以我的应用程序有一个公共数据库和一个loggingtypes是每个人都一样。 在该loggingtypes中,有一个stringtypes的字段也是相同的。

现在,用户A将logging“Hello World”保存到iCloud。 这里有个诀窍:我会为string添加一个唯一的标识符,比如“Hello World1230ABD6-3C61-1234-802E-D866F09AC012”,并将其上传到iCloud。

现在,用户A需要告诉用户他希望与他的UUID共享数据,所以用户A告诉用户B.现在,用户A的UUID将被添加为用户B的CKSubscription的谓词。

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

这是否正常工作? 还是有另一种devise模式,允许通过iCloud与其他iCloud账户共享/同步,但不能与所有人(公众)共享/同步?

PS我想分享的数据不太敏感,所以不需要非常安全。 数据对每个人(公共)都不是很有意思,所以只需要select其他的iCloud账户就可以共享数据。

我很感激任何想法或提示如何实现这一点!

谢谢

有几种方法来实现这样的事情。 在所有情况下归结为:

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

CKReference存储在哪里以及如何存储取决于您想要共享的方式。

  • 如果你只想与一个人分享,那么只要将这个CKReference字段包含到你的主loggingtypes中即可。 不要像您在问题中所述的那样将其添加到消息中。 添加一个额外的字段。
  • 如果你想分享给有限的人,那么你可以添加一个字段到你的recordType这是一个CKReference列表。
  • 如果你想分享一大群人,那么你可以添加一个groupType的recordType,它将有一个groupID加上一个groupMembers recordType,在那里你将存储所有的用户CKReference的ID是谁的组成员。

在任何情况下,解决scheme都是安全的。 这一切都归结于您在应用程序中定义的谓词。 如果其中一个谓词filter不正确,则可能发生某人看到某些不适合他的事情。

在EVCloudKitDao的演示应用程序是一个基于CloudKit的聊天应用程序。 它使用便利的图书馆EVCloudKitDao,但分享的东西的结构是类似的。

CloudKit共享是在WWDC 2016上引入的。这允许在已知的一组用户之间共享私人数据库logging,这听起来就像您正在寻找的一样。 ……“CloudKit新增function”会议有一个很好的概述: https : //developer.apple.com/videos/play/wwdc2016/226/