Как приложение iOS может поддерживать TCP-соединение на неопределенное время в фоновом режиме? - PullRequest
42 голосов
/ 30 апреля 2011

Приложение для iPhone, подключающееся к удаленному серверу через TCP. Сценарии использования:

  1. приложение (пользователь) отправляет данные на сервер, а сервер возвращает данные обратно.
  2. сервер может отправлять данные в приложение, пока оно ничего не делает.

Предположим, что если приложение не отправляет данные на сервер в течение 30 минут, сервер закроет соединение. Я хочу сохранить соединение в течение 120 минут, даже если пользователь ничего не делает.

Случай 1: если приложение находится на переднем плане, я могу использовать таймер, чтобы отправить некоторые данные, которые ничего не делают, на сервер. Нет проблем.

Случай 2 : если пользователь нажмет кнопку «Домой» и приложение перейдет в фоновый режим, что я могу сделать? Я не хочу показывать предупреждение или что-то, чтобы прервать пользователя (он отсутствует или играет в игры). Я просто хочу поддерживать соединение в течение более длительного периода времени, и когда пользователь возвращается в приложение, он узнает, что соединение будет еще живым, и будет рад этому.

Я прочитал документацию о фоновом выполнении, многозадачности и локальных уведомлениях API iphone. Я не уверен, смогу ли я достичь Дела 2 .

Используйте только легальные API, без джейлбрейка.

Ответы [ 4 ]

24 голосов
/ 01 мая 2011

Тапботы решили эту проблему с помощью Pastebot, предложив пользователю постоянно запускать тихую фоновую звуковую дорожку .

Обратите внимание, что Apple не одобряет использование хаков, таких как использование фонового звука или API-интерфейсов VOIP для поддержания работы не аудио или приложений VOIP (о чем свидетельствует «обходной путь», описанный в статье выше), поэтому использование этих методов может привести к отклонению на данном этапе. представления.

К сожалению, однако, не существует легального API для поддержания соединения в фоновом режиме. Возможно, они представят его в будущем обновлении для iOS, но вы можете подумать о том, чтобы отправить запрос функции , чтобы выразить свою поддержку.

15 голосов
/ 01 мая 2011

Посмотрите Реализация приложения VoIP в Руководстве по программированию приложений Apple для iOS.Это не проверенное решение, но я думаю, что оно может быть использовано для достижения того, о чем вы просите.

Реализация приложения VoIP

Голос через ИнтернетПриложение протокола (VoIP) позволяет пользователю совершать телефонные звонки, используя подключение к Интернету вместо услуги сотовой связи устройства.Такое приложение должно поддерживать постоянное сетевое соединение со связанной с ним службой, чтобы оно могло принимать входящие вызовы и другие соответствующие данные.Вместо того чтобы постоянно поддерживать бодрствование приложений VoIP, система позволяет им приостанавливаться и предоставляет средства для мониторинга их сокетов. При обнаружении входящего трафика система активирует приложение VoIP и возвращает ему управление его сокетами.

Я не уверен, разрабатываете ли вы приложение VoIP, ноВы сможете получить доступ к сокетам и реагировать на входящие пакеты.Текст после цитаты относится к [setKeepAliveTimeout:handler:][2], который позволяет вам установить блок кода, который позволяет поддерживать соединение (ваш VoIP).Минимальное время планирования составляет 10 минут.

В разделе «Реализация приложения VoIP» есть параграф Установка обработчика поддержки активности .Мне любопытно, поможет ли это.Пожалуйста, сообщите нам, если это решило вашу проблему.

5 голосов
/ 08 января 2013

1.Создайте свой сокет с помощью свойства VOIP, как это

[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

[outputStream  setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

2.Добавить необходимый фоновый режим, как «Приложение предоставляет услуги передачи голоса по IP» в app.plist

Если ваше приложение в фоновом режиме, сокет voip не закроется. Используя этот сокет с уилокальным уведомлением, вы можете получить.

"Если ваше приложение не является оригинальным магазином приложений VoIP-приложений отклонит "

3 голосов
/ 01 мая 2011

Когда приложение находится на переднем плане:

Посмотрите на STOMP http://stomp.codehaus.org/Protocol

Платформа STOMP в Obj-C http://code.google.com/p/stompframework/

и брокер ActiveMQhttp://activemq.apache.org/

Когда приложение работает в фоновом режиме, я бы, вероятно, использовал APNS (уведомления), чтобы побудить пользователя разбудить приложение обратно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...