【问题标题】:CloudKit share Data between different iCloud accounts but not with everyoneCloudKit 在不同的 iCloud 帐户之间共享数据,但不与所有人共享
【发布时间】:2015-10-18 01:20:03
【问题描述】:

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

我想过一种可行的方法,但我不确定它是否可行,以及我是否忘记或误解了一些事情。

假设用户 A 希望能够与其他 iCloud 用户共享字符串,但不能与所有人共享。所以用户 A 想将“Hello World”分享给用户 B,但不想分享给用户 C,也不想分享给用户 D。

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

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

现在用户 A 需要告诉用户他想用他的 UUID 共享数据,所以用户 A 告诉用户 B。现在用户 A 的 UUID 将作为 Predicate 添加到用户 B 的 CKSubscription 中。

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

这行得通吗?或者是否有另一种设计模式允许通过 iCloud 与其他 iCloud 帐户共享/同步,但不能与所有人(公共)共享/同步?

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

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

谢谢

【问题讨论】:

    标签: ios objective-c icloud cloudkit


    【解决方案1】:

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

    【讨论】:

    • 该视频的 20:30 时间开始谈话的“分享记录”部分
    【解决方案2】:

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

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

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

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

    在所有情况下,解决方案都是安全的。这一切都取决于您在应用程序中定义的谓词。如果您的谓词过滤器之一不正确,则可能有人看到不适合他的东西。

    EVCloudKitDao的demo app中是一个基于CloudKit的聊天应用。它使用的是便利库 EVCloudKitDao,但共享内容的结构类似。

    【讨论】:

    • 感谢您的帮助!我会看看CKReference。还有一个问题:在我的情况下,我只有一个字符串需要用户 A 和用户 B 同步。并不是用户 A 和用户 B 需要一直添加新记录,就像聊天应用程序中的新聊天条目一样示例...更像是如果我有一个用户 A 和用户 B 都可以编辑的核心数据属性,并且它将在应用程序启动时同步...那么我真的需要参考吗?谢谢!
    • 用户 A 和用户 B 都需要知道他们应该监控什么记录。如果您有一种机制可以将相关记录的 recordID 获取给其他用户,那么这就足够了。您可以创建自己的 RecordID。你只需要确保它是独一无二的。
    • 一个补充。在过去的 2 个月中,CloudKit 中有一个错误会阻止发送记录更改的更新通知。
    • 再次感谢!这一切对我来说仍然很困惑......我真正想要实现的是跨不同 icloud 帐户的核心数据 icloud 同步......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多