2015-01-19 3 views
13

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

Следующее, что я сделал.

При создании приложения я добавляю Voice to IP, а также Audio и AirPlay в файл plist. Затем я отмечаю соединение с websocket с NetworkServiceTypeVoIP, как вы можете видеть here.

Я не установил обработчик тайм-аута keep keep, потому что регистрация не имеет значения, если приложение не проснется, чтобы ответить на звонок. Любая помощь будет принята с благодарностью.

Следует отметить, что это мой первый проект Swift, и я не очень хорошо знаком с платформой iOS.

+0

Используете ли вы сокет TCP в качестве своего сокета VoIP? http://stackoverflow.com/a/7393083/624920 –

+0

Я использую websocket, поэтому это определенно TCP. Вы можете найти код для проекта здесь https://github.com/BetterVoice/phonertc/blob/master/src/ios/WebSocket.swift#L27 –

ответ

0

Вы можете найти ответ на свой вопрос или какой-либо ключ ->here < -

Правильно должны исследовать следующее:

applicationDidEnterBackground 
beginBackgroundTaskWithExpirationHandler 
1

Посмотрите на Apple, documentation, вы, вероятно, заинтересованы в UIBackgroundModes=voip.

UPD:

Из документации:

Чтобы настроить приложение VoIP, вы должны сделать следующее:

  1. Включить поддержку для передачи голоса по IP из раздела режимов Фоновые вкладка «Возможности» в вашем проекте Xcode. (Вы также можете включить эту поддержки, включив в UIBackgroundModes ключ со значением Voip в файле Info.plist вашего приложения.)
  2. Настройки один из гнезд для приложения для использования VoIP.
  3. Перед тем, как перейти на задний план, вызовите метод setKeepAliveTimeout:handler:, чтобы установить обработчик как , выполняемый периодически. Ваше приложение может использовать этот обработчик для поддержки своего сервисного соединения .
  4. Настройте свою аудио сессию для обработки переходов в активное и активное использование.
+2

Если ссылка не работает или изменяется, ваш ответ сводится к «вы 'вероятно, интересуется 'UIBackgroundModes = voip'.". Не могли бы вы немного его сформулировать, чтобы после ссылки не было необходимости? –

+1

Имеет ли следующее обновление для вас какой-то смысл? – ilidar

+0

Ах, это ** много ** лучше. Спасибо. –

2

Чтобы работать приложение в фоновом режиме, то Вам необходимо включить передачи голоса по IP-флаг ON (Путь: Переход к целевой -> возможности -> Режимы фона). как показано ниже.

enter image description here

И добавьте следующий код в своем проекте, чтобы поддержать в фоновом режиме:

Шаг 1: Declare __block UIBackgroundTaskIdentifier bgTask как глобальные переменные.

Шаг 2: Чтобы добавить следующий код в applicationDidEnterBackground.

- (void)applicationDidEnterBackground:(UIApplication *)application { 

     bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     bgTask = UIBackgroundTaskInvalid; 
      }]; 

} 

Шаг 3: Остановить обработчик фоновой задачи один раз и приложения приходят в режиме переднего плана.

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 

    [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 

}