Получение изменений NSPersistentCloudKitContainer в фоновом режиме для установки уведомлений
Я добавил в свое приложение локальные уведомления, запускаемые по дате, и теперь я хочу, чтобы пользователь мог получать уведомление, которое они установили на одном устройстве, на всех своих устройствах, на которых установлено приложение. Я сохраняю уведомление, которое они установили в основном объекте данных (сохраняя идентификатор уведомления и дату, когда оно должно быть инициировано). Приложение использует NSPersistentCloudKitContainer для синхронизации устройств пользователей вместе.
Поскольку я сохраняю уведомления, которые пользователь устанавливает в этот контейнер iCloud, есть ли способ прослушать изменения iCloud в фоновом режиме приложения, чтобы при добавлении уведомления в iCloud я мог прочитать его и установить как локальное уведомление на другом устройства?
Вы можете думать об этом как о том, что пользователь устанавливает напоминание в приложении напоминаний Apple, и как это уведомление появляется на всех моих устройствах iCloud в то время, когда я его установил. Я предпочитаю не создавать серверы какого-либо типа, чтобы справиться с этим, потому что я не знаком с использованием серверов.
Заранее спасибо за вашу помощь!
1 ответ
Да, это возможно дляNSPersistentCloudKitContainer
для синхронизации, пока ваше приложение находится в фоновом режиме, и вы можете реагировать на эти изменения, прослушивая любое из этих уведомлений:NSManagedObjectContextObjectsDidChange
,NSPersistentCloudKitContainer.eventChangedNotification
, иNSPersistentStoreRemoteChange
(если включен). Есть несколько важных предостережений:
- iOS может запланировать выполнение импорта с приоритетом утилиты, которая в конечном итоге может выполняться или не выполняться.
- Этого не происходит, когда ваше приложение не запущено, поскольку уведомления об удаленных изменениях не запускаются, поэтому, например, если вы перезапустите устройство, синхронизация не произойдет, пока вы снова не откроете приложение. Возможно, вы могли бы запланировать фоновые задачи для периодических попыток синхронизации, чтобы попытаться быть в курсе последних событий - я не пробовал этого.
Кажется, это работает более надежно в iOS 16 по сравнению с 15 в моем тестировании. Я задокументировал свои выводы на форумах разработчиков.