• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何通知另一台设备 CloudKit 记录已更新?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:44:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

CKSubscription 文档说:当记录修改导致订阅触发时,服务器会向具有该订阅的所有设备发送推送通知,但对记录进行原始更改的设备除外。

假设我有两台设备:设备 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 ];

      }
    }];

在我看来,当一台设备更新记录时,应该通知另一台设备。但这不是正在发生的事情 - 没有通知。在 WWDC 2014 Advanced iCloud 视频中,他们谈到了当一台设备将通知标记为已读时会收到通知,但我也没有成功。

当另一台设备登录到同一帐户更新记录时,是否有人成功通知了一台设备?



Best Answer-推荐答案


我遇到了同样的问题。我得到了这个订阅:

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 帐户。

编辑:我刚刚意识到您在询问记录更新,而不是创建,但也许我的回答仍然可以提供帮助。当我遇到这个问题时,我发现一件奇怪的事情是,在我为 CKNotificationInfo 的 soundName 属性设置了一个值后,我开始接收通知。

关于ios - 如何通知另一台设备 CloudKit 记录已更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26486087/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap