Эту проблему довольно сложно описать, но я работаю над ней довольно долго, и, возможно, я упускаю очевидное.
Я запрограммировал приложение (Swift 5.0 для iOS 12), которое,среди других задач, напоминает пользователю три раза в день, чтобы сделать задачу.Три раза генерируются случайным образом (с некоторыми правилами распространения) и планируются как локальные уведомления в фиксированные даты, не повторяясь, в течение следующих двух недель, следовательно, всего 42.Уведомления получают расписания после того, как приложение запущено , остановлено , пользователь изменил некоторые данные , сервер синхронизации загрузил новые данные и после фоновой выборки .
Проблема, о которой сообщил тестер TestFlight, заключалась в том, что он не получал никаких новых уведомлений, после того как не открывал приложение в течение нескольких дней подряд .Я проверил его настройки системы и приложения для уведомлений и фоновой синхронизации приложения, которые, похоже, были правильно настроены.Тем не менее уведомления перестали отображаться, хотя теоретически они должны отображаться как минимум в течение двух недель после последней активности приложения.
Как мне найти эту ошибку?
Для меня уведомления появляютсяпо назначению (три раза в день, каждый день, в течение нескольких недель).Также я проверил фоновую выборку вручную через XCode (запуск из-за фоновой выборки).
Я дважды проверил свой код (генератор для дат уведомления и мой алгоритм планирования).Код никогда не падает, и используя вывод консоли, я проверил в Xcode, что уведомления были запланированы.
Мои лучшие догадки, кроме того, что я запрограммировал что-то не то, что он обновил приложение или iOS и не открывал приложение впоследствии - я слышал, что это может быть причиной.Но, честно говоря, я почти ничего не знаю об этом.: (
Планирование (LocalNotification содержит информацию для уведомления):
private static func schedule(localNotification: LocalNotification, withBadge badge: NSNumber? = nil) {
// Create the notification content.
let content = UNMutableNotificationContent()
content.title = localNotification.title
content.subtitle = localNotification.subtitle
content.body = localNotification.body
content.categoryIdentifier = localNotification.categoryIdentifier
content.userInfo = localNotification.userInfo
content.sound = UNNotificationSound.default
content.badge = badge
// Create the notification trigger.
let trigger = UNCalendarNotificationTrigger(
dateMatching: Calendar.current.dateComponents(
[.year, .month, .day, .hour, .minute, .second],
from: localNotification.date
),
repeats: localNotification.repeats
)
// Create the request.
let request = UNNotificationRequest(
identifier: localNotification.identifier,
content: content,
trigger: trigger
)
// Add the request.
UNUserNotificationCenter.current().add(request) {
(error: Error?) in
}
}
Мой метод вывода на консоль:
UNUserNotificationCenter.current().getPendingNotificationRequests {
(notificationRequests: [UNNotificationRequest]) in
print(#function + " - numberPendingNotificationRequests: \(notificationRequests.count)")
for notificationRequest in notificationRequests {
print(" - \(notificationRequest.content.title)")
print(" - Identifier: \(notificationRequest.identifier)")
print(" - UserInfo: \(notificationRequest.content.userInfo)")
print(" - \(String(describing: notificationRequest.trigger?.description))")
print(" - \(notificationRequest.content.subtitle)")
}
}
Результаты в «условиях разработки»:как и ожидалось, и для меня в «режиме производства» (TestFlight) он работает, насколько я могу сказать. Тем не менее, некоторые пользователи испытывают описанную проблему.
1. Я что-то упускаю здесь очевидноеили я делаю общую ошибку (я не уверен на 100%, если планирование локальных уведомлений «разрешено» в фоновом режиме)?
2. Кто-нибудь еще здесь сталкивался с подобнымпроблемы и нашли причину или даже решение?
3. Есть ли способ воспроизвести или наблюдать эту ситуацию, не «дней ожидания, когда уведомления больше не появляются»?
PS Это мой первый пост здесь, и я также благодарен за совет относительно правильности самих постов.:)