setKeepAliveTimeout Поведение iOS, превысило 15 пробуждений за 300 секунд - PullRequest
6 голосов
/ 05 января 2012

Я пишу приложение VOIP на iOS 5 и пытаюсь понять, как реальное общение может оставаться живым в фоновом режиме.

Я понимаю, что сокет может получить максимальное количество пробуждений за один раз.количество времени.Моя проблема заключается в том, что мое сокет-соединение получает слишком много сообщений о пробуждениях, из-за чего приложение завершается с сообщением об ошибке:

превышено 15 пробуждений за 300 секунд

Что я действительно не понимаю,как сокет должен иметь возможность постоянно отправлять и получать данные через него (для нужд VOIP), если существует ограничение на количество данных, которые он может получать за промежуток времени?

Скажем, сокетполучение голосовых данных для голосового разговора, который происходит в фоновом режиме.Разве эти голосовые данные не должны проходить через сокет?Если да, то как это может работать, если есть лимит активности, который сокет может иметь за определенное время?

Ответы [ 2 ]

18 голосов
/ 14 марта 2012

Поведение приложения VOIP в фоновом режиме (iOS 4.0+):

Наличие единственного оставшегося открытого сокета, помеченного как Voip Этот сокет VOIP поддерживается системой, в то время как приложение приостановлено на уровне BG Вы можетезапланируйте блок поддержания активности, и ОС будет разбудить ваше приложение каждый раз X X> = 10 минут (см. [[UIApplication sharedApplication] setKeepAliveTimeout: handler :) этот сокет НЕ является медиа-сокетом, он использует толькодля получения приглашений на входящие вызовы Приложение активируется при всех входящих данных на сокете (ограничение iOS 5.0+ составляет 15 раз за 300 секунд) После получения входящего вызова ваше приложение активируется иВы можете открыть аудиосеанс для этого вызова.

Приложения VOIP должны быть помечены на info.plist в разделе «Необходимые фоновые режимы» как «voip» и «audio».

После того, как вы открыли аудиосеанс (для активного вызова), ваше приложение может работать полностью в фоновом режиме, и оно больше не приостанавливается, пока этот аудиосеанс не будет закрыт.

ЛюбойДругой способ - использовать Push-уведомления в качестве триггеров для входящих звонков.
Кроме того, это избавит вас от необходимости поддерживать розетку в режиме 24/7, сэкономить батарею,
и будет работать, даже если пользователь закрыл приложение (что не относится к первому варианту).

0 голосов
/ 01 февраля 2012

Какую версию IOS, какое устройство вы используете?

Это известная «особенность» / проблема, представленная Apple в IOS5 для уменьшения расхода заряда батареи приложениями Voip ...

...