2011-03-10 98 views
8

我使用XMPP框架創建了一個聊天應用程序。當我退出應用程序(進入後臺模式)時,我想接收聊天消息。並且還需要顯示圖標徽章...如何我這樣做?iphone XMPP應用程序運行背景

回答

11

你可以通過調用它的VoIP應用程序確實運行在iOS4的背景基於框架的XMPP應用程序。 (但是,蘋果將從App Store拒絕它,除非它也確實做VoIP)。

你需要設置你的應用程序的(應用程序名稱)-info.plist文件VoIP的標誌,然後在

(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 

處理程序,你想對郵件創建一個本地通知,如果你轉到後臺運行(您可以通過UIApplicationDidEnterBackgroundNotificationUIApplicationWillEnterForegroundNotification跟蹤的背景狀態)。本地通知處理程序可以設置應用程序徽章號碼等(就像推送通知一樣)。在XMPP架構(具體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 2011-03-11 06:07:30

+0

控制不會去「socketWillConnect:(AsyncSocket *)套接字」方法。請幫助 – iphonedev23 2013-04-23 07:15:46

+0

控制權應該轉到socketWillConnect:只要您在XMPPStream對象上調用了addDelegate:即可。請注意,socketWillConenct:調用現在期待GCDAsyncSocket *參數而不是AsyncSocket *(從XMPPFramework 3開始) – 2013-04-23 15:08:19

6

有限數量的程序可以在無限制的後臺運行,這些程序是VOIP程序,播放音樂的程序以及跟蹤用戶位置的程序。如果你沒有合法地進行這些操作,那麼你只能進行10分鐘的後臺操作。請注意,Apple會拒絕那些嘗試使用愚蠢技巧的應用,比如播放「空」聲以保持應用的正常運行。

你可以找到在這裏後臺運行的任務信息: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

你的其他選擇,我猜是有聊天程序通過聯繫服務器進行操作,當用戶有一個服務器隊列響應處於脫機狀態,然後在下次登錄時發送它們。我不是一個網絡程序員,我不知道這是多麼的可行,但我認爲如果你只提供文本聊天,這是無限期地完成這個任務的唯一方法。更好的選擇是使用上面的指南來啓用你的應用VOIP。

編輯作爲的iOS 5.0的發佈,也可能獲得註冊爲書報亭應用,同時轉到後臺下載信息的應用程序,再加上一堆其他時髦的功能,僅報亭也。

-Ash

+0

首先感謝您對您replay..i不想要把這個程序appstore.using IPA文件分發..我讀你給的鏈接,並添加VOIP in info.plist ..需要更多的代碼更改..因爲它仍然不能在backkground .. – Raj 2011-03-10 13:03:58

+0

我認爲你已經skim閱讀我指出的文件;您需要做的不僅僅是將VOIP添加到info.plist以使其工作。進一步查看「實施VOIP應用程序」下的頁面 – Ash 2011-03-10 13:10:25

+0

我的應用程序設置爲基於位置的應用程序,但在後臺3小時後,它與我的XMPP服務器斷開連接。除了將info.plist設置爲位置之外,還需要在xmppframework中設置其他設置,以便它不會斷開連接? – subharb 2012-02-07 11:43:46

5

在最新的XMPP架構你不需要修改框架文件。

只要這樣做: 1。這對你的連接方法

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

2.增加VoIP功能鍵添加到您的信息plist文件:

enter image description here

+2

但蘋果拒絕這種方式...... – Raju 2016-04-13 05:30:45

相關問題