【问题标题】:Subscriptions with CKShare使用 CKShare 订阅
【发布时间】:2018-01-30 07:50:09
【问题描述】:

我是订阅和 Cloudkit 的新手,我正在尝试设置订阅,以便在创建、编辑、删除 CKShare 记录以及参与者离开私有和共享数据库的共享时发送推送通知。

在我的应用程序中,Cloudkit 中有两种记录类型。第一个是Deck,第二个是CardDeckCardone-to-many 关系。每个Card 拥有一个CKReference 到它的Deck。我注意到 Cloudkit 仪表板中有第三个记录类型,名为 cloudkit.share。根据我的研究,我相信我在这里需要四个订阅。当用户使用CKDatabaseSubscription 接受共享时,每个DeckCard 在私有数据库上使用CKQuerySubscription,在共享数据库上每个DeckCard。我是否还需要在每个数据库上为记录类型cloudkit.share 创建另一个订阅,总共六个订阅?

谢谢

【问题讨论】:

  • 为私有和共享数据库创建 CKDatabaseSubscription。这样,对您的私有或共享数据库所做的任何更改都将作为通知发送。这包括添加/删除/更新记录/共享。有一些关于这方面的 WWDC 视频,请观看。
  • 您的评论确实有助于处理从获取更改的记录返回的 cloudkit.share 记录。当我获取更改的记录时,为什么我会得到一个返回。

标签: ios cloudkit cksubscription ckreference


【解决方案1】:

在共享和私有数据库上都设置了一个CKDatabaseSubscription 后,任何更改都会触发 AppDelegate 方法:

-(void)application:(NSApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary<NSString *,id> *)userInfo

共享数据库有点复杂,因为您无法查询默认区域。您需要使用setRecordZoneWithIDChangedBlock:^(CKRecordZoneID * _Nonnull zoneID) 设置初始CKFetchDatabaseChangesOperation 以获取共享记录zoneID。有了它,您可以像私有数据库一样查询所有共享记录。

不要忘记在测试时从 CloudKitDashboard 中删除订阅,因为订阅将保留并触发,即使从您的代码中删除也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2016-03-20
    • 1970-01-01
    • 2010-11-06
    • 2021-02-22
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多