Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序未运行时的iOS 7后台提取_Ios_Iphone_Objective C_Background Process - Fatal编程技术网

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

应用程序未运行时的iOS 7后台提取,ios,iphone,objective-c,background-process,Ios,Iphone,Objective C,Background Process,我编写了一个简单的应用程序,以测试和监视iOS7中该功能的工作方式 首先,我在Info.plist文件中设置了UIBackgroundMode选项 然后, 我将以下代码添加到应用程序中:使用选项完成启动:AppDelegate.m中的方法: 最后,我实现了应用程序:(UIApplication*)应用程序 performFetchWithCompletionHandler:方法 每次单击Debug->Simulate Background Fetch按钮时,它都会更改应用程序的批次号,并按

我编写了一个简单的应用程序,以测试和监视iOS7中该功能的工作方式

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

然后,

我将以下代码添加到应用程序中:使用选项完成启动:AppDelegate.m中的方法:

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

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

但是,当应用程序没有运行时(甚至在后台模式下也没有,只是没有运行),我一直无法使它工作

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

application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:
所以我的问题是,有没有一种方法可以在应用程序未运行时测试后台提取


我正在iOS 7.1的第五代iPod上测试这一点。请注意,如果用户从应用程序切换器中删除应用程序,后台提取将不会再次发生。这正是苹果的初衷。详见相关单据:

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

还有一个老的开发者论坛帖子(不幸的是,这个链接已经不存在了)

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

您可以发出一个简单的GET请求,例如:“到您的web服务器,然后在web服务器上grep access.log以获取”?ping=1

编辑:另一种测试在后台启动的应用程序的方法(例如:不能够双击home按钮并切换到home按钮)是创建一个仅后台模式。转到产品->方案->管理方案,然后复制默认方案

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


我不这么认为,因为您永远无法知道操作系统何时会执行此操作。如果它在您测试过的条件下工作,那么当您发布它时,一切都应该工作。。。在实时环境中,如果不使用静默推送通知,则无法触发此事件。请尝试对其中一个案例安排本地通知,并查看其是否会触发。我尝试在调用本地通知时显示该通知,但在应用程序未运行时找不到触发后台提取的方法。我只是想确定它是否真的在做它所提供的。你要等多久?例如,我的应用程序每1-2小时唤醒一次进行提取,当我离开设备过夜时,我会在日志中看到我的调试消息。如果应用程序崩溃,系统会重新启动它(当然100%),但如果用户杀死应用程序,我想它会运行得更久(但不确定:),如果应用程序被明确杀死,关于iOS的部分是否仍然正确?这似乎适用于我的应用程序,它使用后台抓取。但我刚刚启动并关闭了Gmail应用程序,给自己发了一封电子邮件,Gmail应用程序仍然会发布通知。。。。wtf?Gmail应用程序使用另一种机制(推送通知)和BackgroundFetch来完成此任务。@MikeAsdf谢谢,添加了一个文档链接并删除了断开的论坛链接。@taber当应用程序关闭/暂停时,如何每一分钟通过api将当前位置更新到我的服务器?你有什么线索吗?