我是订阅和Cloudkit的新手,我正在尝试设置订阅,以便在创建,编辑,删除CKShare记录时以及当参与者离开私有数据库和共享数据库的共享时发送推送通知。
在我的应用程序中,我在Cloudkit中有两种记录类型。第一个是Deck
,第二个是Card
。 Deck
与one-to-many
有Card
的关系。每个Card
都会CKReference
保留Deck
。我注意到在Cloudkit仪表板中有一个名为cloudkit.share
的第三个记录类型。从我的研究中我相信我需要四个订阅。当用户接受共享时,私有数据库上的Deck
和Card
分别使用CKQuerySubscription
和共享数据库中的Deck
和Card
各一个使用CKDatabaseSubscription
。我是否还需要在记录类型cloudkit.share
的每个数据库上创建另一个订阅,总共六个订阅?
谢谢
答案 0 :(得分:0)
在共享数据库和私有数据库上都设置了一个CKDatabaseSubscription
之后,任何更改都会触发AppDelegate方法:
-(void)application:(NSApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary<NSString *,id> *)userInfo
由于您无法查询默认区域,因此共享数据库要稍微复杂一些。您需要使用CKFetchDatabaseChangesOperation
设置初始setRecordZoneWithIDChangedBlock:^(CKRecordZoneID * _Nonnull zoneID)
才能获取共享记录 zoneID 。这样,您可以以与私有数据库相同的方式查询所有共享记录。
在进行测试时,请不要忘记从CloudKitDashboard删除订阅,因为即使从代码中删除了订阅,订阅也会保留并触发。