如何无限地每隔1分钟运行一次iOS应用程序?

我做了一个应用程序,需要发送位置和状态更新到服务器每1分钟。 我尝试了下面的方法,但没有一个帮助我。 有没有解决scheme?

1 – NSTimer – 许多人build议这样做。 但问题是要backgroundMode,它只能工作20分钟。 之后,应用程序停止发送数据。

2 – BackgroundFetchMode – 在开始看起来像正确的解决scheme。 但是这个能力并不能保证每分钟运行一次应用程序。 它有一个algorithm,iOS决定应该运行哪个应用程序。

这个API不像计时器任务,系统将根据许多约束来决定何时调用处理程序。如果将timeInterval设置为2.00f(2secs),则每调用2(最小)秒,都会调用处理函数。

3 – LocationUpdate – 这种方式不起作用,因为它只运行你的应用程序,如果你移动至less500米。

一旦设备从先前的通知移动500米或更远,应用程序就可以预期发出通知。 它不应该比每五分钟一次更频繁地发出通知。 如果设备能够从networking中检索数据,则位置pipe理者更可能及时地发送通知。

4 – 推送通知 – 在一篇文章中说,在这个方法中,你可以在限定的时间内运行一个应用程序,它确实!

您可以在规定的时间内安排通知。 但问题是向用户显示通知。 我需要在背景中沉默的东西。

而且,你不能每1分钟运行一段代码。 它只是向用户显示通知。 用户应点击您的通知,然后didReceiveLocalNotification可用,您可以运行代码。

正如苹果在他们的文档中所述 :

在iOS中,只有特定的应用程序types才能在后台运行:

  • 在后台播放可听内容的应用,例如音乐播放器应用
  • 在后台录制audio内容的应用程序
  • 随时向用户通知其位置的应用,例如导航应用
  • 支持网际协议语音(VoIP)的应用
  • 需要定期下载和处理新内容的应用程序
  • 从外部附件获得定期更新的应用程序

实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面。 声明这些服务可以让系统知道你使用了哪些服务,但是在某些情况下,系统框架确实会阻止你的应用程序被挂起。

您可以阅读关于在链接中实现和声明这些后台任务的所有信息。 但是,如果您的应用程序是另一种types的应用程序,或者您无法使用系统框架,那么您的应用程序无法无限期地在后台运行。 即使是这样,你也应该总是期望系统由于某种原因停止你的任务(重新启动手机)。