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