Как правильно * подключить * фоновую розетку при запуске iPhone в приложении VOiP?

Я использую сокет VOiP в своем приложении для iPhone. Мне удается заставить его работать правильно, как в фоновом режиме, так и когда приложение находится на переднем плане.

Моя проблема - при запуске iPhone: как убедиться, что у iPhone есть доступ к сети (3G или Wi-Fi), чтобы правильно подключить розетку, не беспокоя пользователя?

Подробности: приложение VOiP должно запускаться автоматически, как только запускается iPhone: это работает нормально, didFinishLaunching вызывается сразу после запуска iPhone. Но в это время пользователь, возможно, не ввел свой пин-код (поэтому 3G недоступен) и Wi-Fi может быть недоступен. Есть ли какой-нибудь способ start автоматически подключать сокет VOiP при нормальном доступе к сети?

Мой нынешний подход, который не работает: в didFinishLaunching я продолжаю пытаться запускать сокет VOiP каждые 5 секунд. Если для установления соединения требуется слишком много времени, ОС убьет приложение (максимум 20 секунд для запуска), но поскольку приложение помечено как «VOiP», оно будет запущено снова, и так далее. ... Через некоторое время, когда сеть в порядке, сокет создается, подключается и все, кажется, работает нормально, ИСКЛЮЧАЯ, что, когда данные поступают в сокет, мой обратный вызов didReceivedData не вызывается (я показываю локальное уведомление, как только я получаю что-то из сокета для отладки).

Затем, если я запускаю приложение только 1 раз, а затем выхожу из него (кнопка «Домой»), чтобы приложение работало в фоновом режиме, в этом случае обратный вызов сокета вызывается правильно, и я вижу отображение локальных уведомлений, доказывающих, что в этом случае розетка правильно пробуждается.

Я хотел бы, чтобы сокет VOiP запускался прямо при запуске iPhone (когда сеть в порядке), при этом пользователю не нужно запускать приложение один раз. Есть идеи, как этого добиться?


person yonel    schedule 15.12.2010    source источник


Ответы (1)


Используйте класс Reachability для опроса подключения каждые X секунд, ЗАТЕМ попробуйте подключиться.

Достижимость не займет столько времени, сколько потребуется для создания сокета VoIP.

person Moshe    schedule 02.01.2011
comment
почему бы и нет, но как можно опросить о доступности в фоновом режиме? Поскольку это не VoiP / местоположение и т. Д. (Стандартные фоновые задачи), мне интересно, как я могу достичь такой длительной фоновой задачи, как достижимость опроса? Возможно, как реализация задачи конечной длины в фоновом режиме, как описано в developer.apple.com/library/ios/documentation/iphone/conceptual/? Проблема в том, что applicationDidEnterBackground не вызывается во время загрузки: / - person yonel; 02.01.2011
comment
Привет! Как я обнаружил, выполнение задачи конечной длины в фоновом режиме можно начать в любое время. Это означает, что вы можете создать свою backgroundTask при запуске. Итак, у вас будет до 10 минут на выполнение ваших Socketconnections! - person JackPearse; 23.03.2011
comment
С небольшой задержкой .... спасибо, Джек, я попробую это, я читал об этом в другом треде SO, и это интересная вещь, которую стоит попробовать. - person yonel; 04.11.2011