2014-02-11 2 views
3

Приложение Apple только что было отклонено Apple, так как оно неправильно реализует фоновый режим, и это приложение VOIP с использованием iOS.Выполнение услуги VOIP (PJSIP) в фоновом режиме

Мой нечетное код, который держал его работы был

[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES]; 
[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{ 
    [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES]; 
}]; 

Что я знаю, это неправильно

Затем я следовал

http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/ который является VOIP хак, чтобы он работает все время. Снова я думаю, что это неправильно.

Мне просто нужно вызвать один метод, чтобы сохранить PJSIP в живых.

Как это сделать должным образом?

UPDATE

Я посмотрел на руководство компании Apple, кажется, это правильно

[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{ 
     [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES]; 
     NSLog(@"Fire"); 
    }]; 

Однако я не уверен, как настроить PJSIP TCP-порт для работы в фоновом режиме.

APPLE: Настройте один из сокетов приложения для использования VoIP.

пробеги отлично на фоне его только Apple, отвергая его

2,16

Мы обнаружили, что ваше приложение использует фоновый режим, но не включает в себя функциональные возможности, требует, чтобы режим запуска постоянно. Это поведение не соответствует Руководству по обзору App Store.

Мы обнаружили, что ваше приложение объявляет о поддержке VoIP в ключе UIBackgroundModes в вашем Info.plist, но не поддерживает входящие звонки с подключенного VoIP-сервиса.

Если ваше приложение не поддерживает входящие звонки с его подключенного VoIP-сервиса, режим фона voip не подходит. Как указано в Руководстве по программированию iOS, этот ключ предназначен для приложений, которым необходимо отслеживать сокеты для входящих вызовов:

«Вместо того, чтобы постоянно поддерживать VoIP-приложения, система позволяет их приостанавливать и предоставляет средства для мониторинга их сокеты для них. Когда обнаружен входящий трафик, система пробуждает приложение VoIP и возвращает управление его сокетам ».

Пожалуйста, изучите значение «аудио» в ключе UIBackgroundModes вашего файла Info.plist. Использование режима фонового звука будет поддерживать текущие исходящие VoIP-вызовы, пока ваше приложение находится в фоновом режиме.

Было бы уместно добавить функции VoIP или удалить настройку «VoIP» с помощью ключа UIBackgroundModes. Для вопросов с дискретным кодом кода вы можете обратиться к технической поддержке Apple Developer.Пожалуйста, убедитесь, что:

Update 2

PJSIP сказал мне, что разъемы маркируются для VOIP, и поэтому я понятия не имею, почему это отвергается

ответ

1

вы должны проверить раздел в «Декларирование «Поддерживаемая фоновая задача вашего приложения». в ссылке iOS App Programming Guide

Внедрение в VoIP App

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

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

Enable support for Voice over IP from the Background modes section of the Capabilities tab in your Xcode project. (You can also enable this support by including the UIBackgroundModes key with the voip value in your app’s Info.plist file.) 

Configure one of the app’s sockets for VoIP usage. 

Before moving to the background, call the setKeepAliveTimeout:handler: method to install a handler to be executed periodically. Your app can use this handler to maintain its service connection. 

Configure your audio session to handle transitions to and from active use. 

В том числе значения Voip в UIBackgroundModes ключ позволяет системе знать, что она должна позволить приложению работать в фоновом режиме, как нужно управлять его сетевые сокеты. Приложение с этим ключом также перезапускается в фоновом режиме сразу после загрузки системы, чтобы гарантировать, что службы VoIP всегда доступны.

“Tips for Developing a VoIP App.”

+1

Я только что нашел это руководство, путающий бит настраивает ваши сокеты приложений, это библиотека под названием PJSIP, которая обрабатывает все. – Burf2000

+0

Как установить: настройте один из сокетов приложения для использования VoIP. | Прежде чем перейти на задний план, вызовите метод setKeepAliveTimeout: обработчик: метод установки обработчика, который будет выполняться периодически. Ваше приложение может использовать этот обработчик для поддержания своего сервисного соединения. Настройте свой аудиосеанс для обработки переходов в активном режиме и из него. – Eesha

1

Hei, что помогло мне: Дело в том, что, как правило, SIP сигнализации использует UDP в качестве протокола передачи данных, но Apple, позволяет постоянные соединения только с протоколом TCP. Итак, вот шаги:
1) Выясните, если ваш SIP-сервер поддерживает сигнализацию SIP с помощью TCP (например, sip2sip делает, ekiga не делает).
2) Избавиться от соединения UDP в pjsua, вставить где-то

app_config.no_udp = PJ_TRUE; 
app_config.no_tcp = PJ_FALSE; 

3) Если используется исходящий прокси, положить "транспорт = TCP" в конце URL

cfg->cfg.outbound_proxy_cnt = 1; 
cfg->cfg.outbound_proxy[0] = pj_str("sip:proxy.sipthor.net;transport=tcp"); 

4) Добавить «транспорт = TCP» все учетные записи и регистрации сервера URL, то есть, например: + глотка: [email protected], транспорт = TCP глотка: sip2sip.info, транспорт = TCP sip2sip.info имя пользователя пароль

Надеюсь, это поможет.

+0

Можете ли вы мне помочь, я не могу держать розетку в живых 10 минут. (Keep alive перестает работать, пока приложение находится в спящем режиме.) –

+0

Можете ли вы уточнить, где мне нужно сделать соединение в виде TCP –

0

Apple очень обеспокоена тем, что говорит ваше приложение, и тем, что он на самом деле делает. Похоже, ваше приложение фактически не обрабатывает входящие VoIP-звонки, хотя вы упомянули об этом так в своем plist.

Вы можете

а) Удалите настройку VoIP из списка свойств ИЛИ

б) Добавить функциональность для входящих вызовов в приложении

Ура !!!

Смежные вопросы