Как сохранить соединение iphone ios xmpp в фоновом режиме? - PullRequest
2 голосов
/ 24 ноября 2011

XMPPFramework для iPhone является мощным.У меня все работает, но как поддерживать соединение в фоновом режиме более 10 минут?Я был бы признателен за дополнительную документацию / инструкции о том, как этого добиться.

Так что пример использования прост и распространен: Джо онлайн и в приложении чата для iPhone.Он покидает приложение чата и отправляется в Safari, играет в игру, транслирует фильм и выполняет другие действия в течение 3 часов (или более).Джо хочет продолжать получать сообщения в течение этого времени.

Пример приложения позволяет Джо получать локальные уведомления в фоновом режиме, но, кажется, только на 10 минут.Вот соответствующий код (я думаю).Спасибо!

Чтобы помочь другим людям, даже для достижения этой цели, вам необходимо свойство xBppstream enableBackgroundingSocket to YES (это делается для вас в примере проекта iphoneXMPP, который вы должны скопировать) и в appname-Файл info.plist (т.е. iosChat-info-plist), в который необходимо добавить новую пару ключ / значение.Вы должны щелкнуть правой кнопкой мыши где-нибудь и «добавить строку».Вы должны выбрать для «необходимые фоновые режимы», а затем введите «VoIP».Xcode обнаружит, что вы имеете в виду «Приложение предоставляет услуги передачи голоса по IP» после нажатия кнопки ввода.Это дает вам 10 минут на то, чтобы приложение чата было открыто в фоновом режиме (я думаю).Но мы хотим до бесконечности, и я подозреваю, что ответ лежит в методе ниже.Должен ли я просто «переподключиться» в рамках этого метода или чего-то еще, например, [self connect] (у меня есть метод connect)?

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

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) 
{
    [application setKeepAliveTimeout:600 handler:^{

        DDLogVerbose(@"KeepAliveHandler");

        // Do other keep alive stuff here.
    }];
}}

1 Ответ

3 голосов
/ 14 июня 2012

10 минут - приблизительное время, в течение которого iOS позволяет вам оставаться на связи.Вы также можете посмотреть на [app beginBackgroundTaskWithExpirationHandler], что позволит вам запросить больше времени для завершения задачи.Чтобы оставаться на связи на 100%, вам нужно будет либо добавить тег voip, audio или location в info.plist (то есть UIBackgroundModes).

Фоновое изображение не будет работать, если вы не добавите один из этих тегов.Кроме того, добавление тега позволит вам оставаться на связи, но фактический тег должен быть действительным, если вы отправляете его в App Store.Apple отклонит приложение, если не будет реального варианта использования.

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

...