如何通知另一台设备CloudKit记录已更新?

时间:2014-10-21 11:56:01

标签: ios icloud cloudkit cksubscription cknotification

CKSubscription文档说明:当记录修改导致订阅触发时,服务器会向该订阅发送推送通知所有设备,但对原始更改的记录除外。< / p>

假设我有两个设备:设备1和iPad,设备2和iPhone都使用相同的 iCloud帐户登录。假设两个设备都订阅了某种记录类型的记录更新。

我的代码看起来像这样(我已经取出了一些内务管理的东西)

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"fromUserRecordIDName == %@", _member.userRecordIDName];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"fromUserRecordIDName == %@", notificationPublic = [[CKNotificationInfo alloc] init];
notificationPublic.shouldBadge =YES;
notificationPublic.desiredKeys = @[@"fromMemberNameText"];
notificationPublic.shouldSendContentAvailable = YES;


if ([[NSUserDefaults standardUserDefaults] objectForKey:@"TickleRecordUpdateSubscription"] == nil) {

    [cloudManager subscribe:@"TickleRecord" public: YES options:CKSubscriptionOptionsFiresOnRecordUpdate predicate:predicate2 notification:notificationPublic completionHandler:^(CKSubscription *subscription, NSError *operationError) {

      if (operationError) {

       NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), operationError);



      } else{
        [[NSUserDefaults standardUserDefaults] setObject:subscription.subscriptionID forKey:@"TickleRecordUpdateSubscription"];
        [[NSUserDefaults standardUserDefaults] setObject:@"TickleRecordUpdateSubscription"forKey:subscription.subscriptionID ];

      }
    }];

在我看来,当一台设备更新记录时,应该通知另一台设备。但这不是正在发生的事情 - 没有通知。在WWDC 2014高级iCloud视频中,他们谈到当一个设备将通知标记为已读时会收到通知,但我也没有取得任何成功。

当另一台设备登录同一帐户更新记录时,是否有人成功通知过一台设备?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我得到了这个订阅:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recipient == %@", [[CKReference alloc] initWithRecordID:self.userRecordId action:CKReferenceActionNone]];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Message" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation];
subscription.notificationInfo = [CKNotificationInfo new];
subscription.notificationInfo.shouldSendContentAvailable = YES;
subscription.notificationInfo.soundName = UILocalNotificationDefaultSoundName;
subscription.notificationInfo.shouldBadge = YES;
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
[publicDatabase saveSubscription:subscription completionHandler:^(CKSubscription *subscription, NSError *error) {...}];

通过这种方式,我可以从一台设备创建一条记录,并在另一台设备上获得通知,并登录同一个iCloud帐户。

编辑:我刚刚意识到您正在询问记录更新,而不是创作,但也许我的回答仍然有用。我遇到这个问题时发现的一件事就是我在为CKNotificationInfo的soundName属性设置值后开始收到通知。

答案 1 :(得分:0)

不,您必须使用2个不同的帐户。我想这是一个CloudKit错误而不是缺少的功能。现在,你无法让这两款设备拥有最多的数据数据。