应用程序未运行时的iOS 7后台获取

时间:2014-03-24 11:17:10

标签: ios iphone objective-c background-process

我编写了一个简单的应用程序,以测试和监控{7}}功能在iOS7中的工作方式。

首先,我在Info.plist文件中设置了UIBackgroundMode选项。

enter image description here

然后;

我将以下代码添加到 AppDelegate.m 中的 application:didFinishLaunchingWithOptions:方法中:

enter image description here

最后,我实现了应用程序:( UIApplication *)应用程序   按要求执行performFetchWithCompletionHandler:方法。

enter image description here

每次点击调试 - >模拟后台提取按钮,它都会更改应用程序的批号并按预期工作。

但是,当应用程序未运行时,我甚至无法使其工作(即使在后台模式下也没有运行)。

Apple表示,当应用程序未运行且操作系统要分别执行以下方法时:

application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:

所以我的问题是,有没有办法在应用程序未运行时测试后台提取?

我正在使用iOS 7.1 iPod第五代进行测试。

1 个答案:

答案 0 :(得分:21)

编辑2 请注意,如果用户从应用切换器中杀死应用,则后台提取将永远不会再次发生。这正如Apple所期望的那样。有关详细信息,请参阅相关的"Understanding When Your App Gets Launched into the Background"文档:

  

在大多数情况下,系统在强制使用后不会重新启动应用   退出用户。一个例外是位置应用程序,在iOS 8和iOS中   之后被用户强制退出后重新启动。

一个旧的开发者论坛帖子(遗憾的是链接不再存在)......

  

“如果你从多任务UI中杀死一个应用程序,系统永远不会   再次自动启动应用程序。这里的逻辑是,如果   用户杀了你的应用程序,他们可能希望它保持死亡状态。“

您可以向您的Web服务器发出一个简单的GET请求,例如:“http://dev.example.org/?ping=1”然后grep web服务器上的access.log“?ping = 1”

编辑:测试在后台启动的应用的另一种方法(例如:无法双击主页按钮并切换到它)是通过创建仅后台方案。转到产品 - >方案 - >管理方案,然后复制默认方案。

scheme settings

然后编辑新方案并单击选项选项卡并选中“由于后台获取事件而启动” - 当您运行应用程序时,它将直接启动到后台,就像正常使用一样。

launch with background fetch