UNUserNotificationCenter не работает, когда приложение убито
Я только что изменил свое уведомление для iOs 10 и других:
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
let content = UNMutableNotificationContent()
content.body = notifMessage!
content.sound = UNNotificationSound.default()
// Deliver the notification in five seconds.
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "Upload", content: content, trigger: trigger)
// Schedule the notification.
let center = UNUserNotificationCenter.current()
center.add(request)
}
} else {
let notification = UILocalNotification()
notification.alertBody = notifMessage
notification.fireDate = NSDate() as Date
notification.soundName = UILocalNotificationDefaultSoundName
UIApplication.shared.scheduleLocalNotification(notification)
}
Когда я запускаю свои приложения на своем устройстве, подключив его к USB, оно работает, но только когда приложение работает в фоновом режиме, оно не работает, когда:
я убиваю приложение
когда приложение отображается
2 ответа
Если вы убьете приложение (дважды нажав на кнопку "Домой" и затем проведя пальцем вверх), это не только завершит работу приложения, но и запретит дальнейшую фоновую работу приложения (до тех пор, пока пользователь не запустит его снова). Вы должны просто нажать кнопку "Домой" и позволить приложению сброситься через обычные процессы восстановления памяти. Или вы можете, для целей тестирования, программно завершить работу приложения. Но вы не можете использовать трамплин (двойное нажатие кнопки "Домой"), поскольку это влияет на допустимые фоновые режимы приложения.
Что касается уведомления, когда приложение отображается, если пользователь нажимает на уведомление, а пользователь вручную запускает приложение, не обращая внимания на уведомление, все они передаются в приложение различными способами. См. Раздел " Ответ на уведомления и события " UIApplicationDelegate
документация Или обратитесь к Руководству по программированию приложения для iOS: Фоновое выполнение для получения общей информации о фоновой работе.
В вашем коде есть пара ошибок: 1. Отсутствует заголовок уведомления. Вы добавили текст и звук к содержанию, но заголовок отсутствует. Заголовок является обязательным, и если вы не добавите заголовок, уведомление не будет отображаться.
content.title = "Some Title"
- Не использовать
init
инициализировать. Эти функции могут быть переписаны как:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "Upload", content: content, trigger: trigger)
- Значение идентификатора такое же. Значение идентификатора должно быть разным для каждого запланированного уведомления. Уведомления с таким же идентификатором не отображаются.
let request = UNNotificationRequest(identifier: some_value, content: content, trigger: trigger)
- Время запуска. Время, которое вы указываете в триггере, составляет 5 секунд. Что может быть меньше для вас, чтобы закрыть приложение и проверить уведомление. Просто чтобы быть в безопасности, убедитесь, что это значение составляет не менее 1 минуты, чтобы вы могли правильно проверить, работает ли он или нет.
Надеюсь это поможет.