订阅CKShare

时间:2018-01-30 07:50:09

标签: ios cloudkit cksubscription ckreference

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

由于您无法查询默认区域,因此共享数据库要稍微复杂一些。您需要使用CKFetchDatabaseChangesOperation设置初始setRecordZoneWithIDChangedBlock:^(CKRecordZoneID * _Nonnull zoneID)才能获取共享记录 zoneID 。这样,您可以以与私有数据库相同的方式查询所有共享记录。

在进行测试时,请不要忘记从CloudKitDashboard删除订阅,因为即使从代码中删除了订阅,订阅也会保留并触发。