gpt4 book ai didi

ios - CloudKit CKSubscription 通知基础

转载 作者:可可西里 更新时间:2023-11-01 06:06:48 24 4
gpt4 key购买 nike

我今天一直在摆弄CKSubscription。我对此有一些疑问。

我这样设置我的订阅:

-(void)addSubscriptions
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];

CKSubscription *newRecordSub = [[CKSubscription alloc] initWithRecordType:_recordTypeName predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion];

CKNotificationInfo *noteInfo = [CKNotificationInfo new];
noteInfo.alertBody = @"Update!";
noteInfo.shouldBadge = YES;
noteInfo.soundName = UILocalNotificationDefaultSoundName;
newRecordSub.notificationInfo = noteInfo;

CKContainer *container = [CKContainer defaultContainer];
CKDatabase *privateDatabase = [container privateCloudDatabase];

[privateDatabase saveSubscription:newRecordSub completionHandler:^(CKSubscription *subscription, NSError *error) {

}];
}

问题 1:

创建我的订阅时,我只需要将它保存到我的容器一次吗?由于这称为应用程序运行超时,我收到一条错误消息,简单地说,重复订阅,因此该应用程序按预期工作,但我是否应该以不同的方式处理此问题,而不是每次都运行?

接下来,我设置使用我的 AppID 接收通知,并在我的 AppDelegate 中注册它们。

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];

最后,我按如下方式处理这些通知:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
CKNotification *note = [CKNotification notificationFromRemoteNotificationDictionary:userInfo];

if (note.notificationType == CKNotificationTypeQuery)
{
CKQueryNotification *queryNote = (CKQueryNotification *)note;
CKRecordID *recordID = [queryNote recordID];
[[NSNotificationCenter defaultCenter] postNotificationName:kCloudKitNewRecordFlightLog object:recordID];
}
}

问题 2:

为什么此时我收不到任何通知?当添加/删除、更新新记录时,我的所有代码都会运行并且我的应用程序也会更新。但是,不会显示任何声音、角标(Badge)或横幅来通知用户。

问题 3:

当收到云套件通知时,然后让本地通知向相关 View 发送消息以更新记录是否是一种明智的做法?

最佳答案

  1. 是的,您只需设置一次。您可以查询订阅(使用 fetchAllSubscriptionsWithCompletionHandler)以查看是否应该创建它。或者忽略错误。
  2. 这可行,或者您可以设置委托(delegate)机制。

关于ios - CloudKit CKSubscription 通知基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889786/

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