Я работаю с UILocalNotifications в первый раз. В основном работает с повторяющимися уведомлениями. Почти все имеет смысл, кроме одного.
Документация Apple описывает несколько случаев обработка локальных уведомлений при их срабатывании.
Во-первых, случай, когда пользователь «нажимает на уведомление», находясь вне приложения:
Если уведомление является предупреждением и пользователь нажимает кнопку действия (или, если устройство заблокировано, открывает ползунок действия), приложение запускается. В методе application:didFinishLaunchingWithOptions: делегат приложения может получить объект UILocalNotification из переданного словаря параметров с помощью ключа UIApplicationLaunchOptionsLocalNotificationKey. Делегат может проверить свойства уведомления и, если уведомление включает пользовательские данные в свой словарь userInfo, он может получить доступ к этим данным и соответствующим образом обработать их.
В нем также приводится пример того, что происходит, когда пользователь находится внутри приложения:
Если приложение находится на первом месте и видно, когда система доставляет уведомление, предупреждение не отображается, значок не помечается и звук не воспроизводится. Однако приложение:didReceiveLocalNotification: вызывается, если его реализует делегат приложения. Экземпляр UILocalNotification передается в этот метод, и делегат может проверить его свойства или получить доступ к любым пользовательским данным из словаря userInfo.
В обоих этих случаях разработчик может получить доступ к uilocalnotification, а затем решить, что с ним делать. Однако в третьем случае — когда пользователь за пределами приложения видит и игнорирует уведомление, а затем запускает приложение, не вызывается метод, позволяющий приложению узнать, какие уведомления были запущены ранее?
Сначала я подумал, что это утверждение описывает такое поведение, но теперь я не уверен:
С другой стороны, если локальное уведомление отмечает только значок приложения, а пользователь в ответ запускает приложение, вызывается метод application:didFinishLaunchingWithOptions:, но объект UILocalNotification не включается в словарь параметров.
Как я могу справиться с третьим случаем? Как я могу узнать, какие локальные уведомления сработали? Нужно ли мне перебирать свой список и проверять все их время самостоятельно? Есть ли лучший способ сделать это?