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

Kre*_*erg 8 objective-c ios 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.

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

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

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

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

谢谢

Edw*_*eer 13

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

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

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

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

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

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


goo*_*ate 8

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

  • 该视频的 20:30 时间开始演讲的“共享记录”部分 (2认同)