В моем приложении пользователи могут синхронизировать данные между всеми своими устройствами iCloud (Core Data + CloudKit). И в этом приложении у меня есть функция напоминания, я бы тоже хотел использовать этот iCloud. Я протестировал приложение Apple Calendar и запланировал напоминание и это напоминание, которое было получено со всех устройств iCloud (на которых установлено это приложение и принимаются уведомления). Поэтому моя проблема заключается в том, как запланировать это напоминание на всех устройствах iCloud:
Моя идея такова:
Подписаться на изменения контейнера CloudKit для privateDB, чтобы серверы Apple отправляли уведомления pu sh на все устройства при создании, обновлении и удалении «Задачи». Когда это тихое уведомление получено, приложение делает: - обновляет основной кэш данных, чтобы убедиться, что оно обновлено - l oop, чтобы проверить все «Задачи» в контейнере и запланировать / отменить локальные уведомления, если необходимо.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
if IS_ICLOUD_ENABLED {
let taskSubscription = CKQuerySubscription(recordType: "CD_Task", predicate: NSPredicate(value: true), subscriptionID: "taskSubscription", options: [CKQuerySubscription.Options.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.shouldSendContentAvailable = true
taskSubscription.notificationInfo = notificationInfo
CKContainer.default().privateCloudDatabase.save(taskSubscription, completionHandler: { _, error in
if error == nil {
print("task cloud subscription saved successfully")
} else {
print("task cloud subscription error occured : \(error!.localizedDescription)")
}
})
}
}
код, используемый для подписки на изменения. (тихое уведомление)
Но я делаю по-другому, и я хотел бы знать наиболее оптимизированный: я мог бы отправить в пользователя silentNotification в свойствах объекта 'Задача', чтобы запланировать Задачу и запланировать / отменить ее При необходимости непосредственно, когда уведомление, я получил, но устройство. Таким образом, мне не нужно обновлять локальный кеш раньше, но отправка уведомлений будет намного тяжелее, верно? И некоторые из этих «Задач» просто не должны планировать напоминание или просто должны быть отменены, поэтому иногда данные отправляются даром.
Есть некоторые вещи, на которые я тоже должен обратить внимание: если пользователь включите iCloud во время работы приложения (из приложения настроек Apple), я должен посмотреть, нужно ли мне планировать локальные уведомления. если пользователь активирует уведомления пользователя (из приложения настроек Apple или во время работы приложения), я должен посмотреть, нужно ли мне снова планировать локальные уведомления.
Так что вы думаете по этому поводу? Какой из них лучший способ сделать? Может быть, есть лучший способ сделать?