Как уведомить другое устройство об обновлении записи CloudKit?

Документация CKSubscription гласит: Когда изменение записи вызывает срабатывание подписки, сервер отправляет push-уведомления всем устройствам с этой подпиской, кроме того, которое внесло первоначальное изменение в запись.

Предположим, у меня есть два устройства: устройство 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 ];

      }
    }];

Мне кажется, что когда одно устройство обновляет запись, другое устройство должно быть уведомлено. Но это не то, что происходит - уведомлений нет. В видео Advanced iCloud на WWDC 2014 они говорят о том, что получают уведомление, когда одно устройство помечает уведомление как прочитанное, но я также не добился успеха в этом.

Кто-нибудь успешно уведомил одно устройство, когда другое устройство, вошедшее в ту же учетную запись, обновляет запись?

2 ответа

У меня такая же проблема. Я получил это работает с этой подпиской:

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.

Изменить: Я только что понял, что вы спрашиваете об обновлениях записи, а не о создании, но, возможно, мой ответ все еще может помочь Когда я столкнулся с этой проблемой, мне показалось необычным то, что я начал получать уведомления после того, как установил значение свойства soundName в CKNotificationInfo.

Нет, вы должны использовать 2 разных аккаунта. Я хотел бы думать, что это ошибка CloudKit вместо отсутствующей функции. Теперь нет никакого способа, которым вы могли бы иметь оба устройства с самыми последними данными.

Другие вопросы по тегам