Как в iOS 13 переодически проверять базу и отправлять User Notification?
В приложении пользователь добавляет различные объекты, для которых выставляются две ключевые даты. На каждую из этих дат нужно отправлять уведомление, но секундная точность не важна.
Пытался завести BackgroundTask с периодической проверкой базы и отправкой уведомления. Но время вызова таска зависит, видимо, от циклов спутника Сатурна. Вызывается это все раз в месяц, если повезет.
Есть идея сделать через уведомления по календарю, но не уверен, будет ли это работать точно и какие будут побочные эффекты. При каждом редактировании объекта, нужно будет сносить уведомления и ставить новые.
Собственно, вопрос: как лучше сделать то, что я хочу, если я не хочу изобретать велосипед?
После закрытия приложения, в методе applicationDidEnterBackground перебирайте по базе элементы, и выставляете локальные пуш-уведомления. Здесь же можно обновить бейдж, если он используется.
Помните про ограничение 64 пуша, если нужно больше - свой бекенд.
Будить через BackgroundTask ради уведомлений не стоит)
Необходимо выставлять уведомления каждый раз при входе в бэкграунд режим или это просто для упрощения?
Так же уточните, пожалуйста, 64 пуша в какой промежуток времени?
Иван Воробей, забыл спросить, это не будет сказываться на производительности, если постоянно удалять и ставить 64 уведомления (а мне нужно будет именно столько)?
Иван Воробей, если что, я не спрашивал про то, будут ли срабатывать локальные уведомления без приложения в памяти. У меня такое тоже работает. А я имел ввиду, будет ли успевать срабатывать метод applicationDidEnterBackground при насильной выгрузке прилы из памяти. Потому что, как я понимаю он предназначен для срабатывания, когда приложение просто "свернули" кнопкой хоум и оно дальше там через сколько то секунд засыпает. Не уверен, но мне кажется при выгрузке из памяти насильно, метод не сработает и, соответственно, не обновятся триггеры и сами уведомления останутся со старыми значениями.
Иван Воробей, понятно. Просто я не пробовал такое. Обновляю обычно уведомления сразу. Думал, что iOS при таком насильном завершении, сразу прибивает приложение, не дав ему опомниться ))
Когда-нибудь проверю ))
NSA-bot, перед terminated вызовется вход в фон, и будет около 5 секунд на работу. Можете проверить принтами.
Для справедливости, Эппл не рекомендует делать запросы в БД в этом методе. Получается для меня это костыль, хоть и хороший) Если вы тянете данные не из бд, то это прекрасное место для установки пушей и бейджа.
Для Бэкграуд моуд там определенный список возможных задач, и ваше вряд ли подходит, поэтому скорее всего просто приостанавливается.
Локальные уведомления по календарю, отлично подходят для этого и будут срабатывать точно, как вам нужно.