Подтвердить что ты не робот

Как приложение iOS может поддерживать постоянное соединение TCP в фоновом режиме?

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

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

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

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

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

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

Используйте только юридические API, без джейлбрейка.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

1.Создайте свой сокет с свойством VOIP следующим образом

[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

[outputStream  setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

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

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

"Если ваше приложение не является оригинальным хранилищем приложений приложений voip отклонит"

Ответ 4

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

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

Структура STOMP в Obj-C http://code.google.com/p/stompframework/

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

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