Я использую сокет 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 (когда сеть в порядке), при этом пользователю не нужно запускать приложение один раз. Есть идеи, как этого добиться?