Как уведомить другое устройство об обновлении записи 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 вместо отсутствующей функции. Теперь нет никакого способа, которым вы могли бы иметь оба устройства с самыми последними данными.