CloudKit уведомления для определенного поля в записи
У меня работают уведомления из облачного набора. Когда кто-то меняет запись, подписчики уведомляются. Мое определение подписки выглядит так:
NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"%K = %@", CLOUDKIT_PUBLIC_ID_GUID, theCloudGUID];
int subscriptionOptions = CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion;
CKSubscription *publicSubscription = [[CKSubscription alloc] initWithRecordType:CLOUDKIT_RECORDNAME_PUBLIC_ID
predicate:searchConditions
options:subscriptionOptions];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey = CLOUDKIT_NOTIFICATION_PUBLIC;
notificationInfo.shouldBadge = NO;
notificationInfo.alertBody = CLOUDKIT_NOTIFICATIONBODY_PUBLIC;
publicSubscription.notificationInfo = notificationInfo;
[publicDatabase saveSubscription:publicSubscription completionHandler:^(CKSubscription * _Nullable subscription, NSError * _Nullable error)
{
//error handling
}
Дело в том, что в этой записи есть несколько полей. Я только хочу предупредить подписчика, когда меняется одно конкретное поле.
При создании подписки есть ли способ установить предикат поиска для обнаружения изменений в определенном поле? Я прочитал различные документы Predicate, но не увидел этого специально упомянутого.
Или, при получении уведомления, есть ли способ узнать, какие поля изменились? В didReceiveRemoteNotification
Я старался:
CKQueryNotification *queryNotification = [CKQueryNotification notificationFromRemoteNotificationDictionary:userInfo];
Но queryNotification.recordFields
нулевой.
В худшем случае я рассмотрел возможность разбить конкретное поле на его собственную запись, но затем у меня есть накладные расходы на поддержание большего количества записей, связанных общим GUID. Я надеялся сохранить это более компактным.
1 ответ
Ваш вопрос немного стареет, так что, возможно, вы уже поняли это, но с помощью desiredKeys
свойство может помочь: https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1514931-desiredkeys
Если эти уведомления представляют собой тихие нажатия, вы можете посмотреть на полезную нагрузку, чтобы увидеть, изменились ли определенные ключи, и ваше приложение реагирует соответствующим образом.
Если это push-уведомления (видимые пользователю), я не думаю, что вы можете нажать push на основе изменения ключа как такового. Вы могли бы установить NSPredicate
на ваше CKQuerySubscription
Если вы проверяли, как изменилось значение (равно ли оно этому или нет, и т. д.), но я не уверен, что оно вызвано каким-либо изменением вообще.