记录中特定字段的cloudkit通知

时间:2016-11-06 17:59:20

标签: ios apple-push-notifications nspredicate cloudkit cknotification

我有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 个答案:

答案 0 :(得分:1)

您的问题有点老了,所以也许您已经知道了,但是使用desiredKeys属性可能会有所帮助:https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1514931-desiredkeys

如果这些通知是静默推送,则可以查看有效负载以查看某些键是否已更改,并使您的应用程序做出相应的反应。

如果这些是推送(对用户可见)通知,我认为您不能根据密钥更改本身来推送。如果您正在测试如何更改值(它等于 this 还是不等于NSPredicate上设置CKQuerySubscription >那个等),但我不确定是否会因为任何更改而触发它。