Запланируйте оповещение (напоминание) на всех устройствах iCloud - PullRequest
0 голосов
/ 10 апреля 2020

В моем приложении пользователи могут синхронизировать данные между всеми своими устройствами 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 или во время работы приложения), я должен посмотреть, нужно ли мне снова планировать локальные уведомления.

Так что вы думаете по этому поводу? Какой из них лучший способ сделать? Может быть, есть лучший способ сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...