#ios #objective-c #swift
#iOS #цель-c #swift #objective-c
Вопрос:
Я хочу показать какой-либо знак внутри моего приложения, что есть непрочитанные сообщения. Я выполняю фоновые запросы к серверу, чтобы убедиться, что есть новый контент для показа.
Я не уверен — как часто я должен проверять сервер на наличие обновлений. Я подумал, что было бы неплохо проверить наличие обновлений в методе viewDidLoad моего ViewController. Но приложение может перейти в фоновый режим и после возврата через несколько дней — viewDidLoad не будет запущен. В противном случае, если я помещу его в viewWillAppear — его следует использовать чаще, чем следовало бы.
Как это должно быть сделано?
Комментарии:
1. Вы можете использовать
applicationWillEnterForeground
метод AppDelegate, чтобы запросить у вашего сервера обновление, когда приложение возвращается из фонового режима2. Это не уведомления, это опрос, нет? Вы не можете использовать APNS?
Ответ №1:
Вы также можете использовать тихие push-уведомления для запуска синхронизации. Когда на устройство поступает тихое push-уведомление, пользователь ничего не знает об уведомлении. Но ваше приложение получает уведомление, и приложению будет предоставлено некоторое время для загрузки нового контента и представления его пользователю. Вы можете прочитать больше об этом здесь — https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html , в разделе Настройка автоматического уведомления
Комментарии:
1. Спасибо, Ольга. Что произойдет, если пользователь не согласится использовать push-уведомления для моего приложения?
2. Разумеется, push-уведомления не будут приходить. Вы можете убедить пользователя включить их, объяснив, зачем вам нужно это разрешение и что пользователь потеряет в случае отказа. Если пользователь не согласен, вы можете, например, обновлять свой контент один раз в день (или чаще, зависит от ваших потребностей) — просто сохраните временную метку последнего обновления и сравните ее с текущей датой в viewWillAppear.