在越狱设备上使用Backgrounder时未调用UIApplicationDelegate

时间:2012-06-06 13:21:44

标签: iphone background jailbreak uiapplicationdelegate

我遇到了一些问题。 我的软件需要知道应用程序何时处于后台,因此它将与服务器断开连接,并开始接收推送通知。

为此,我使用UIApplicationDelegate的方法:

- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application

问题是,当一个越狱设备使用名为backgrounder的“tweak”时,会强制你的应用程序保持活动而不会进入后台,当我们点击HOME按钮时,UIApplicationDelegate的方法都不会被调用。 / p>

问题是,用SSL连接的每个客户端都会花费我很多内存在服务器上。我并不关心设备是否越狱,或者事实上,应用程序将在设备上无限期运行。但我希望他们在应用程序不再出现在屏幕上时与服务器断开连接,但我似乎找不到任何方法可以在安装后台程序时通知我这样的操作。

解决方案查找check my own answer on the post

3 个答案:

答案 0 :(得分:2)

最好的办法是吃掉大量的记忆,这样监狱破坏者就不得不放弃你的申请!开玩笑当然。最好的选择是等待用户的不活动。例如:1。检查设备是否已越狱。 2.检查是否安装了背景(我不确定你是否可以这样做,但我很确定你可以)。 3.如果用户是所有那些等待他们处于非活动状态的东西,比如30秒,然后断开与服务器的连接。

答案 1 :(得分:1)

安装Backgrounder时,或者只有当您的应用程序转换为后台时,您的应用程序中是否都不会调用这些方法?如果它们永远不会被调用,那么解决方案非常简单:设置一个计时器,比如10秒,当你的应用程序的application:didFinishLaunchingWithOptions方法被调用时,如果该计时器到期,如果applicationDidBecomeActive:有没有被调用,那么你知道用户正在使用Backgrounder。

如果他们确实在应用程序启动时被调用,那么事情会变得棘手。我不知道有任何直接的方法来检测是否从沙箱中安装了像Backgrounder这样的调整。您只需检查设备是否已越狱(有多种方法可以执行此操作,它们应该很容易找到),并为您的服务器连接添加超时时间(如果是这样)。

答案 2 :(得分:0)

奶茶让我走上正轨......所以赏金归于他。

但实际上我得到了更好的解决方案...... 我已经检查了在退出应用程序时抛出的每一个通知......

我得到了这个,即使配置了后台程序以保持应用程序打开,这些通知也会被抛出:

UIApplicationSuspendedEventsOnlyNotification -- When going into background
UIApplicationResumedEventsOnlyNotification   -- When going into foreground

这是有道理的,因为即使使用后台程序,让应用程序继续接收事件通知也是一个坏主意,例如,当在应用程序外部完成旋转(或摇动)更改时。您是否想象每次移动iPhone时每个应用程序都在背景上轮换?