IOS фоновая работа
У меня есть приложение для iPhone, например, Facebook для iPhone. Мое приложение должно подключаться к моему серверу и регулярно читать все сообщения каждые два часа. У меня есть поток, чтобы прочитать все сообщения, но когда приложение завершено, поток не может работать. Может ли поток работать независимо от основного делегата или как мне найти решение этой проблемы?
2 ответа
Ваше приложение не может делать вещи в фоновом режиме. Существует API для завершения задач, таких как загрузка фотографии, но даже это будет убито через 10 минут.
Но Apple Push Notification Service кажется наиболее подходящим решением для вашей проблемы. Ваш сервер уведомляет устройство о том, что происходит что-то новое, и вы получаете реальные сообщения, когда пользователь открывает приложение.
редактировать: Начиная с iOS 7 Apple реализовала функцию, где вы можете планировать выполнение задач для извлечения данных в фоновом режиме. Эти задачи не гарантированно выполняются в любое конкретное время. См. Примечания к выпуску для iOS 7 и связанные методы ниже:
Приложения, которые регулярно обновляют свой контент, связываясь с сервером, могут зарегистрироваться в системе и периодически запускаться для извлечения этого контента в фоновом режиме. Чтобы зарегистрироваться, включите ключ UIBackgroundModes со значением выборки в файле Info.plist вашего приложения. Затем, когда ваше приложение запущено, вызовите setMinimumBackgroundFetchInterval: метод, чтобы определить, как часто оно получает сообщения об обновлении. Наконец, вы также должны реализовать приложение: executeFetchWithCompletionHandler: метод в делегате приложения.
Там нет решения.
Apple не разрешает приложениям работать в фоновом режиме, если они не имеют определенного типа, такого как местоположение, аудио, voip или newstand (ваше приложение может продолжать работать в течение приблизительно 10 минут после того, как оно было активным, если оно использует shouldBeginBackgroundTaskWithExpirationHandler).
Обходного пути нет, многие и многие другие задавались вопросом, как сделать то же самое, что и вы, но законного пути не существует. Ваше приложение не может запланировать какие-либо периодические звонки домой.
Единственный способ, которым ваше приложение может работать после того, как оно перешло в состояние приостановки или прекращения, состоит в том, чтобы пользователь запустил его явно или в ответ на локальное уведомление или удаленное push-уведомление.