我使用XMPP框架創建了一個聊天應用程序。當我退出應用程序(進入後臺模式)時,我想接收聊天消息。並且還需要顯示圖標徽章...如何我這樣做?iphone XMPP應用程序運行背景
回答
你可以通過調用它的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
處理程序,你想對郵件創建一個本地通知,如果你轉到後臺運行(您可以通過UIApplicationDidEnterBackgroundNotification
和UIApplicationWillEnterForegroundNotification
跟蹤的背景狀態)。本地通知處理程序可以設置應用程序徽章號碼等(就像推送通知一樣)。在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];
}];
}
有限數量的程序可以在無限制的後臺運行,這些程序是VOIP程序,播放音樂的程序以及跟蹤用戶位置的程序。如果你沒有合法地進行這些操作,那麼你只能進行10分鐘的後臺操作。請注意,Apple會拒絕那些嘗試使用愚蠢技巧的應用,比如播放「空」聲以保持應用的正常運行。
你可以找到在這裏後臺運行的任務信息: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
你的其他選擇,我猜是有聊天程序通過聯繫服務器進行操作,當用戶有一個服務器隊列響應處於脫機狀態,然後在下次登錄時發送它們。我不是一個網絡程序員,我不知道這是多麼的可行,但我認爲如果你只提供文本聊天,這是無限期地完成這個任務的唯一方法。更好的選擇是使用上面的指南來啓用你的應用VOIP。
編輯作爲的iOS 5.0的發佈,也可能獲得註冊爲書報亭應用,同時轉到後臺下載信息的應用程序,再加上一堆其他時髦的功能,僅報亭也。
-Ash
首先感謝您對您replay..i不想要把這個程序appstore.using IPA文件分發..我讀你給的鏈接,並添加VOIP in info.plist ..需要更多的代碼更改..因爲它仍然不能在backkground .. – Raj 2011-03-10 13:03:58
我認爲你已經skim閱讀我指出的文件;您需要做的不僅僅是將VOIP添加到info.plist以使其工作。進一步查看「實施VOIP應用程序」下的頁面 – Ash 2011-03-10 13:10:25
我的應用程序設置爲基於位置的應用程序,但在後臺3小時後,它與我的XMPP服務器斷開連接。除了將info.plist設置爲位置之外,還需要在xmppframework中設置其他設置,以便它不會斷開連接? – subharb 2012-02-07 11:43:46
在最新的XMPP架構你不需要修改框架文件。
只要這樣做: 1。這對你的連接方法
#if !TARGET_IPHONE_SIMULATOR
{
self.xmppStream.enableBackgroundingOnSocket = YES;
}
#endif
2.增加VoIP功能鍵添加到您的信息plist文件:
但蘋果拒絕這種方式...... – Raju 2016-04-13 05:30:45
- 1. IOS,應用程序背景運行
- 2. 如何在iphone中運行我的應用程序背景?
- 3. iPhone應用程序使用MPMusicPlayer背景
- 4. iPhone應用程序背景超時
- 5. 如何在iphone中使用背景應用程序時運行重複過程?
- 6. 在iPhone中創建應用程序背景前景在iphone
- 7. 如何在Android中運行iOS中的應用程序背景?
- 8. 應用程序崩潰 - = XMPP爲iPhone
- 9. iPhone iOS在背景中運行應用程序生成並處理通知?
- 10. 背景音樂停止在iPhone應用程序3/4運行後
- 11. iPhone應用程序在iPad模擬器上運行,但背景是倒置的!
- 12. 如何在iOS應用程序的背景上運行其他應用程序?
- 13. Android應用程序背景
- 14. Android背景應用程序
- 15. Joomla背景應用程序
- 16. 去背景後恢復應用程序
- 17. iPhone - 在應用程序啓動過程中,應用程序進入背景
- 18. 拍攝背景中運行的應用程序的截圖 - android
- 19. 在Android上的背景下運行Sencha Touch應用程序
- 20. 運行應用程序時Android按鈕背景無法加載
- 21. 在背景上運行的應用程序(Phonegap Cordova 3.0)
- 22. iOS的Http post當應用程序運行的背景
- 23. 應用程序未運行時的iOS背景模式?
- 24. 背景當應用程序運行時的操作
- 25. 刷新應用程序狀態在背景上運行
- 26. 安卓關閉應用程序與背景運行
- 27. 應用程序在Android的背景下運行
- 28. 在應用程序的背景中運行swift文件
- 29. 在背景模式下運行離子應用程序
- 30. 如何找到哪個應用程序運行在前景iphone
謝謝傑夫,這對我來說工作正常..感謝很多:-) – Raj 2011-03-11 06:07:30
控制不會去「socketWillConnect:(AsyncSocket *)套接字」方法。請幫助 – iphonedev23 2013-04-23 07:15:46
控制權應該轉到socketWillConnect:只要您在XMPPStream對象上調用了addDelegate:即可。請注意,socketWillConenct:調用現在期待GCDAsyncSocket *參數而不是AsyncSocket *(從XMPPFramework 3開始) – 2013-04-23 15:08:19