Уведомления пользователей ограничены до предела в приложении iOS, как отправить неограниченное для приложения тревоги?

Я работаю над проектом приложения по тревоге (нажмите на ссылку GitHub), этот код работает нормально, но проблема в том, что уведомления ограничены примерно 64 одновременно, поэтому я не могу отправить продолжение уведомления, пока пользователь не ответит на уведомление. Я читал, что яблоко ограничивает локальное уведомление только 64, но я видел много приложений в магазине Apple, которые непрерывно отправляют уведомление здесь, несколько ссылок из магазина Apple.

https://itunes.apple.com/us/app/red-clock-free-edition-the-minimal-alarm-clock/id567374573?mt=8 https://itunes.apple.com/us/app/alarmy-alarm-clock/id1163786766?mt=8

Кто-нибудь помог понять, как это приложение может отправлять непрерывно, и я попробовал, чтобы эти приложения отправляли уведомления, пока пользователь не ответит на приложение (более 1 часа я проверял). Ниже приведен код для настройки одного уведомления.

    let comingSunday =  findNext("Sunday", afterDate: fireDate.adding(minutes: item))
    let triggerDate = Calendar.current.dateComponents([ .year, .month, .weekday, .hour, .minute, .second], from: comingSunday!)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: alarm.repeatAlarm)

    let request = UNNotificationRequest(identifier: "\(alarm.uuid)0\(item)", content: notificationContent, trigger: trigger)
    UNUserNotificationCenter.current().add(request) { (error) in
                         if let error = error {
                           print("Unable to add notification request, \(error.localizedDescription)")
                         }
    }

Видео приложения Alarmy с постоянным уведомлением

Пожалуйста, установите и запустите приложение из App Store и перед публикацией ответа обратите внимание на работу уведомлений в указанных приложениях.

2 ответа

Вы можете хранить информацию обо всех ваших уведомлениях в локальной базе данных.

Например, если у вас более 64 уведомлений, вы можете опубликовать 64 уведомления через UNUserNotificationCenter, а другие сохранить в локальной базе данных.

Если одно из локальных уведомлений выполнено (уже представлено), вы можете получить информацию о первом уведомлении из локальной базы данных и запланировать его (также вы можете удалить его из локальной базы данных или добавить указанный ключ (например, isScheduled)).

Вы можете обработать эту операцию в методе делегата:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Swift.Void)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Swift.Void)

Делегат работает только тогда, когда приложение запущено

Может быть тривиальным, но если вам просто нужно быть уведомленным больше раз, я обычно использую:

UNTimeIntervalNotificationTrigger (timeInterval: 60.0, повторы: true)

Таким образом, вы можете добавить ОДИН, который считается одним, и он может сосуществовать с вашим другим (реальным) уведомлением. Как только пользователь нажал, Вы можете убить его.

Другие вопросы по тегам