저는 CKSubscription 알림을 사용하여 공개 데이터베이스에 대한 변경 사항을 추적하는 CloudKit 기반 앱에서 작업하고 있습니다. 심지어, 나는 그것이 가져 오는 미래의 큐에 표시에서 계속됩니다 알림 읽기를 표시 알고있는 것처럼CKFetchNotificationChangesOperation 오래된 알림을 반환합니다.
__block NSMutableArray *notificationIds = [NSMutableArray new];
CKFetchNotificationChangesOperation *operation = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChangeToken:self.serverChangeToken];
operation.notificationChangedBlock = ^(CKNotification *notification) {
[notificationIds addObject:notification.notificationID];
[self processRemoteNotification:notification withCompletionHandler:completionHandler];
};
__weak CKFetchNotificationChangesOperation *operationLocal = operation;
operation.fetchNotificationChangesCompletionBlock = ^(CKServerChangeToken *serverChangeToken, NSError *operationError) {
if (operationError) {
NSLog(@"Unable to fetch queued notifications: %@", operationError);
}
else {
self.serverChangeToken = serverChangeToken;
completionHandler(UIBackgroundFetchResultNewData);
// Mark the processed notifications as read so they're not delivered again if the token gets reset.
CKMarkNotificationsReadOperation *markReadOperation = [[CKMarkNotificationsReadOperation alloc] initWithNotificationIDsToMarkRead:[notificationIds copy]];
[notificationIds removeAllObjects];
markReadOperation.markNotificationsReadCompletionBlock = ^(NSArray *notificationIDsMarkedRead, NSError *operationError) {
if (operationError) {
NSLog(@"Unable to mark notifications read: %@", operationError);
}
else {
NSLog(@"%lu notifications marked read.", (unsigned long)[notificationIDsMarkedRead count]);
}
};
[[CKContainer defaultContainer] addOperation:markReadOperation];
if (operationLocal.moreComing) {
NSLog(@"Fetching more");
[self checkNotificationQueueWithCompletionHandler:completionHandler];
}
}
};
[[CKContainer defaultContainer] addOperation:operation];
: 앱에서 푸시 알림을 수신 할 때마다 나는 CKFetchNotificationChangesOperation와 알림 대기열을 확인하고이를 처리 한 후 각 읽기 통지를 표시 서버 변경 토큰이 nil로 재설정 된 경우 대신 1 ~ 2 개의 새로운 토큰이 있어야 할 때마다 무조건 변경 토큰을 사용하여 모든 가져 오기에서 많은 오래된 알림을 얻게됩니다. 나는 notificationType 플래그에서 낡은 것을 검출 할 수있다. 그러나 나는 그것들이 전혀 보이지 않는다고 우려하고있다. 어딘가에 한 걸음도 놓치고 있습니까?
동일한 문제가 있습니다. http://stackoverflow.com/questions/27007014/ios-8-cloudkit-cknotifications-keep-showing-up-mark-a-cknotificationtyperea –
@GregMaletic이 문제가 계속 발생합니까? – user2924482
@ user2924482 아니에요. 왜 지금은 효과가 있으며, 전에는 효과가 없었습니다. 확실하지 않습니다! –