【问题标题】:cloudkit notifications for a specific field within a record记录中特定字段的 cloudkit 通知
【发布时间】:2016-11-06 17:59:19
【问题描述】:

我有 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 绑定在一起的记录的开销。我希望保持这个更紧凑。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我实际上不记得我是怎么解决这个问题的。我知道我找到了一个足够的替代方案,但是自从我查看该代码以来已经有一段时间了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多