Я сегодня возился с 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:
Почему я не получаю никаких уведомлений в этот момент? Весь мой код запускается, и мое приложение обновляется, когда новые записи добавляются / удаляются, обновляются. Однако для уведомления пользователя звук, значок или баннер не отображаются.
ВОПРОС 3:
Разумно ли при получении уведомления облачного комплекта, чтобы локальное уведомление отправляло сообщение в соответствующее представление для обновления записей?