2011-03-10 7 views
8

Я создал приложение чата, используя инфраструктуру XMPP .. когда я ушел из приложения (введите фоновый режим) Я хочу получить сообщение чата .., а также нужно отобразить значок значка ... Как можно Я делаю это?iphone XMPP App run background

ответ

11

Вы действительно можете запустить приложение XMPP Framework на основе в фоновом режиме в iOS4 называя это VoIP приложение. (Однако, Apple отвергает его из App Store, если он также не действительно VoIP).

Вы должны установить флаг VoIP в вашем приложении (APPNAME) -info.plist файл, а затем в

(void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket 

Вы должны будете установить гнездо поток флаги включают kCFStreamNetworkServiceTypeVoIP:

CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 

Затем ваше приложение будет разбужено, когда придет новое сообщение XMPP. В вашем обычного обработчике

(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

, вы хотите создать локальные уведомления для сообщения, если вы фоновые (вы можете отслеживать фоновое состояние через UIApplicationDidEnterBackgroundNotification и UIApplicationWillEnterForegroundNotification). Локальный обработчик уведомлений может установить номер значка приложения и т. Д. (Так же, как и для push-уведомления).

EDIT

Новые версии XMPP Framework (в частности, GCDAsyncSocket) теперь поддерживает вызов, чтобы сделать это проще, так что вы можете просто:

- (void)xmppStream:(XMPPStream *)sender socketWillConnect:(GCDAsyncSocket *)socket 
{ 
    // Tell the socket to stay around if the app goes to the background (only works on apps with the VoIP background flag set) 
    [socket performBlock:^{ 
      [socket enableBackgroundingOnSocket]; 
    }]; 
} 
+0

спасибо Джефф, это отлично работает для меня .. очень много :-) – Raj

+0

Управление не собирается "socketWillConnect: (AsyncSocket *) socket" метод. Пожалуйста, помогите – iphonedev23

+0

Элемент управления должен перейти к socketWillConnect: до тех пор, пока вы вызвали addDelegate: на свой объект XMPPStream. Обратите внимание, что вызов socketWillConenct: теперь ожидает параметр GCDAsyncSocket *, а не AsyncSocket * (как из XMPPFramework 3) –

6

Существует ограниченное количество программ, которые могут работать в фоновом режиме без ограничений, это программы VOIP, те, которые воспроизводят музыку, и те, которые отслеживают местоположение пользователя. Если вы не выполняете никаких законных действий, то вы ограничены десятью минутами фоновой операции. Обратите внимание, что Apple откажется от приложений, которые пытаются глупыми трюками, такими как воспроизведение «пустых» звуков, чтобы поддерживать приложение в прямом эфире.

Вы можете найти информацию о запущенных задачах в фоновом режиме здесь: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Другого варианта я думаю должна иметь программу чата работать, связавшись с сервером, и иметь, что ответы очереди сервера, когда пользователь вне форума, затем доставьте их, когда они будут входить в систему. Не будучи простым программистом, я не знаю, насколько это возможно, но я думаю, что это единственный способ сделать это бесконечно, если вы предлагаете только текстовый чат. Лучшим вариантом было бы сделать ваше приложение VOIP включенным, используя приведенное выше руководство.

EDIT Начиная с выпуска iOS 5.0, также можно получать приложения, зарегистрированные в качестве приложений для газетных книг, для загрузки информации в фоновом режиме, а также множество других фанковых функций, которые также являются только для газет.

-Ash

+0

первую очередь спасибо вам replay..i не хочет, чтобы нажать это приложение для appstore.using IPA-файл для распространения. Я прочитал ссылку, которую вы указали, и добавил VOIP в info.plist .. больше не изменилось в коде..beacuse его все еще не работает в backkground .. – Raj

+0

Я думаю, что вы читали без чтения документ, на который я указал вам; вам нужно сделать больше, чем просто добавить VOIP в info.plist, чтобы заставить его работать. Посмотрите далее страницу в разделе «Внедрение приложения VOIP» – Ash

+0

Мое приложение настроено как приложение на основе местоположения, но через 3 часа в фоновом режиме он отключается от моего сервера XMPP. Кроме того, чтобы установить info.plist в качестве местоположения, есть что-то еще, что нужно установить в xmppframework, чтобы он никогда не отключился? – subharb

5

В последнем XMPP Framework вы не нужно изменять файлы фреймворка.

Просто сделайте это: 1.Добавьте это к вашей методе подключения

#if !TARGET_IPHONE_SIMULATOR 
{ 
    self.xmppStream.enableBackgroundingOnSocket = YES; 
} 
#endif 

2. Добавить ключ к вашему IP-Plist Информация о файле:

enter image description here

+2

, но яблоко отклоняется таким образом ...... – Raju