iOS XMPP App run background (by voip)
2014-10-16 11:35
232 查看
本文转自stackoverflo:http://stackoverflow.com/questions/5257580/iphone-xmpp-app-run-background
up vote8down voteaccepted | You can indeed run a XMPP Framework-based app in the background in iOS4 by calling it a VoIP app. (However, Apple will reject it from the App Store unless it also truly does VoIP). You need to set the VoIP flag in your app's (appname)-info.plist file, and then in (void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket You'll need to set the socket stream flags to include kCFStreamNetworkServiceTypeVoIP: CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); Then, your app will be woken up briefly when a new XMPP message arrives. In your normal (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message handler, you would want to create a local notification for the message if you are backgrounded (you can keep track of background state via UIApplicationDidEnterBackgroundNotificationand UIApplicationWillEnterForegroundNotification). The local notification handler can set the application badge number, etc (just like you would for a push notification). EDIT Newer versions of the XMPP Framework (specifically, GCDAsyncSocket) now support a call to make this easier, so you can just have: - (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]; }]; }
| ||||||||||||
|
up vote6down vote | There are a limited number of programs that can run in the background without limit, these being VOIP programs, those that play music, and those that track the user's location. If you're not doing any of these legitimately then you're limited to ten minutes of background operation. Note that Apple will reject apps that try silly tricks like playing 'empty' sounds to keep the app live. You can find info on running tasks in the background here:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html Your other option I would guess is to have the chat program operate by contacting a server, and to have that server queue responses when a user is offline then deliver them when they next log on. Not being a net programmer myself I don't know how feasible this is, but I think it's the only way to do this indefinitely if you're only offering text chat. The better option would be to make your application VOIP enabled using the guide above. EDIT As of the release of iOS 5.0, it is also possible to get apps registered as Newsstand applications to download information while backgrounded, plus a bunch of other funky features that are also Newsstand only. -Ash |
up vote3down vote | In the latest XMPP Framework you don't need to modify framework files. Just do this: 1. Add this to your connect method #if !TARGET_IPHONE_SIMULATOR { self.xmppStream.enableBackgroundingOnSocket = YES; } #endif 2. Add voip key to your info plist file: 第三种的方法是最新的, xmpp framework框架中已经写好了voip的socket后台连接 ! |
相关文章推荐
- iOS: 当app从background切换到foreground,如何通知uiviewcontroller
- Keep Your iOS App Running in Background Forever
- APP Run In Background(App 的后台运行)
- iOS app运行时报错:This application is modifying the autolayout engine from a background thread after the
- iOS提交审核:“your app did not run at iPhone resolution when reviewed on iPad run iOS 10.1.1”
- Run task when app enter background.
- IOS-22-XMPP(1)官方demo登录报错:iPhoneXMPPAppDelegate: xmppStream:didNotAuthenticate:
- iOS 开发:调试错误“Unable to run app in Simulator“
- Cannot connect to xxx.xxx.xxx.xxx when downloading iOS app by OTA
- [iOS]Unable to run app in Simulator
- ios app响应background,foreground 事件实现
- iOS: 当app从background切换到foreground,如何通知uiviewcontroller
- How to Make an iOS VoIP App With Pjsip: Part 3
- IOS 6 越狱工具evasi0n出现问题 You must run this app as Administrator 的解决办法
- iOS小问题---Xcode提示Unable to run app in Simulator
- How to Make an iOS VoIP App With Pjsip: Part 2
- xmpp msg format(server by openfire, client by java app and spark)
- How to Make an iOS VoIP App With Pjsip: Part 5
- iOS获取当前app的名称和版本号-by
- [iOS]Unable to run app in Simulator