gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:19:55 24 4
gpt4 key购买 nike

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 视频中,他们谈到当一台设备将通知标记为已读时会收到通知,但我也没有成功。

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

最佳答案

我遇到了同样的问题。我让它与这个订阅一起工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com