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

ozg*_*gur 8 iphone objective-c background-process ios

我编写了一个简单的应用程序,以测试和监控iOS7中后台提取功能的工作原理.

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

在此输入图像描述

然后;

我加入到下面的代码到应用中:didFinishLaunchingWithOptions:方法在AppDelegate.m:

在此输入图像描述

最后,我已经实现了应用程序:(UIApplication*)应用程序performFetchWithCompletionHandler:方法.

在此输入图像描述

每次我单击Debug-> Simulate Background Fetch按钮时,它都会更改应用程序的批号并按预期工作.

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

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

application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:
Run Code Online (Sandbox Code Playgroud)

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

我正在使用iOS 7.1iPod 5th Gen上测试这个.

tab*_*ber 22

编辑2:请注意,如果用户从应用切换器中杀死应用,则后台提取将永远不会再次发生.这正如Apple所期望的那样.有关详细信息,请参阅相关的"了解您的应用程序何时启动到后台"文档:

在大多数情况下,系统在用户强行退出后不会重新启动应用程序.位置应用程序是一个例外,它在iOS 8及更高版本中被用户强行退出后重新启动.

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

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

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

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

方案设置

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

使用后台获取启动

  • Gmail应用程序使用其他机制(推送通知)和BackgroundFetch来实现这一目标. (5认同)