Это мой реестр для метода подписки
public func RegisterForSubscription(completion: @escaping (Result<CKSubscription, Error>) -> Swift.Void) {
let subscription = CKQuerySubscription(recordType: Film.RecordType, predicate: NSPredicate(value: true), options: [.firesOnRecordCreation, .firesOnRecordDeletion, .firesOnRecordUpdate])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
database.save(subscription) { savedSubscription, error in
if let error = error {
print("Subscription error: \(error.localizedDescription)")
completion(.failure(error))
return
}
if let savedSubscription = savedSubscription {
completion(.success(savedSubscription))
return
}
}
}
Теперь все, что мне нужно, это .firesOnRecordCreation
, но для целей отладки я добавил все три параметра.
Когда я пытался добавить (сохранить ) новую запись, он успешно добавил их в CloudKit. вот метод
public func save(film: Film, completion: @escaping (Result<CKRecord, Error>) -> Swift.Void) {
let filmRecord = film.toRecord()
let operation = CKModifyRecordsOperation(recordsToSave: [filmRecord], recordIDsToDelete: nil)
operation.qualityOfService = .userInitiated
operation.completionBlock = {
completion(.success(filmRecord))
}
database.add(operation)
}
и мой .toRecord()
метод:
public func toRecord() -> CKRecord {
let record = self.record ?? CKRecord(recordType: Self.RecordType)
record[RecordKeys.id.rawValue] = id
record[RecordKeys.title.rawValue] = title
record[RecordKeys.filmDescription.rawValue] = filmDescription
record[RecordKeys.image.rawValue] = image
record[RecordKeys.director.rawValue] = director
record[RecordKeys.producer.rawValue] = producer
record[RecordKeys.releaseDate.rawValue] = releaseDate
record[RecordKeys.rtScore.rawValue] = rtScore
record[RecordKeys.imdbLink.rawValue] = imdbLink
record[RecordKeys.imdbScore.rawValue] = imdbScore
return record
}
Все работает. однако я хотел зарегистрироваться для подписки (беззвучные уведомления) для обнаружения изменений в реальном времени, когда пользователь добавляет новую запись (фильм).
Проблема в том, что всякий раз, когда я добавляю через метод (вызывая метод сохранения), он не запускает параметр .firesOnRecordCreation
. Однако два других работают. Я обновил один из атрибутов через панель управления CloudKit и удалил их, он называется (в appDelegate didReceiveRemoteNotification
)
Что я делаю не так? Когда пользователь добавляет новый фильм из метода (не через панель инструментов VIA), он должен запускаться, но не в этом случае.
EDIT:
Добавление через панель инструментов TRIGGERS подписку. Но НЕ при использовании метода.