Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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 多个长期运行的后台任务_Ios_Objective C_Swift_Background Process_Background Task - Fatal编程技术网

Ios 多个长期运行的后台任务

Ios 多个长期运行的后台任务,ios,objective-c,swift,background-process,background-task,Ios,Objective C,Swift,Background Process,Background Task,我正在开发一个应用程序,在这个应用程序中,我必须执行至少两个后台任务。场景是这样的,我有一个web服务,它告诉我何时开始为用户更新位置。所以,我需要定期打电话给这个服务,检查是否是开始和/或停止用户位置跟踪的时候了。 因此有两个后台任务,获取和位置跟踪。Fetch应该定期运行,这违反了苹果的程序,苹果将监控你的应用程序的使用情况,并自行决定何时更新内容。这已经成为我的第一个问题,有什么办法可以避免吗?第二个问题是多个任务,我如何在它们之间切换? 这里的最佳实践是什么?做什么和不做什么?你应该通过

我正在开发一个应用程序,在这个应用程序中,我必须执行至少两个后台任务。场景是这样的,我有一个web服务,它告诉我何时开始为用户更新位置。所以,我需要定期打电话给这个服务,检查是否是开始和/或停止用户位置跟踪的时候了。 因此有两个后台任务,获取和位置跟踪。Fetch应该定期运行,这违反了苹果的程序,苹果将监控你的应用程序的使用情况,并自行决定何时更新内容。这已经成为我的第一个问题,有什么办法可以避免吗?第二个问题是多个任务,我如何在它们之间切换?
这里的最佳实践是什么?做什么和不做什么?

你应该通过苹果的推送服务器使用推送通知,否则你可能会发现Parse.com这样的服务更容易使用。您可以使用推送通知在应用程序代理中触发或创建任何内容(您可以在其中处理接收推送通知)。正如@Paulw11的评论所述,您甚至可以将有效负载(数据)附加到推送通知并处理它。因此,第一部分是在用户的设备开始跟踪和结束跟踪时向其发出通知

大多数使用CLLocationManager实例的位置跟踪工作都可以通过其委托方法完成。但是,如果需要,可以在NSOperation的子类中使用它,并在NSOperationQueue中管理它,请参阅此处以获取教程:


我建议研究一下课堂文档

最佳做法是,当位置监控应该启动/停止时,服务器将通知推送到应用程序。如果应用程序已终止,则此操作将不起作用,但您的推送可以包括一个有效负载,提示用户启动您的应用程序。位置是直接的背景位置,这是看待事物的一种很好的方式。但是一个可疑的推送通知不会破坏用户体验吗?如果您指定一个静默推送(可用内容:1),则消息只会在没有通知的情况下发送到您的应用程序,除非您的应用程序终止,在这种情况下,通知会显示给用户。仅当用户通过任务切换程序终止应用程序时,应用程序才应终止,但如果应用程序未运行,该怎么办?这些更新是一个非常关键的功能的一部分,我们不想错过它们。那么,坦率地说,针对另一个平台。在iOS上,用户可以控制。他们可以关闭定位服务。他们可以删除你的应用程序使用位置服务的权限,也可以终止你的应用程序(他们还可以关闭手机、退出覆盖范围或删除应用程序)。这类更新总是“尽力而为”。这就是为什么您可以包含一个通知负载,该负载仅在应用程序未运行时显示,提示用户运行应用程序。他们是否这样做是你无法控制的