我已经制作了一个应用程序,需要每1分钟向服务器发送一次位置和状态更新。 我尝试了以下方法,但没有一个帮助我。对此有什么解决方案吗?
1 - NSTimer - 很多人建议这样做。但问题是去backgroundMode,它只能工作20分钟。在该应用程序停止发送数据之后。
2 - BackgroundFetchMode - 在开始时看起来像是正确的解决方案。但是这种能力并不能保证每1分钟运行一次应用程序。它有一个iOS决定应该运行哪个应用程序的算法。
此API不像计时器任务,系统将决定何时调用 处理程序取决于许多约束。如果你设置timeInterval 2.00f(2secs),每2(最小)秒调用一次处理程序。
3 - LocationUpdate - 再次这种方式不起作用,因为它只在您移动至少500米时运行您的应用程序。
只要设备移动500米,应用就会收到通知 或者更多来自之前的通知。不应该期待 通知频率高于每五分钟一次。如果 设备能够从网络中检索位置管理器的数据 更有可能及时发送通知。
4 - 推送通知 - 在一篇文章中说,在这个方法中你可以在规定的时间内运行一个应用程序,它确实可以!
您可以在定义的计划时间内安排通知。但问题是向用户显示通知。我需要在背景中保持沉默。
此外,您无法每1分钟运行一些代码。它只是向用户显示通知。用户应点按您的通知,然后点击didReceiveLocalNotification 可以使用,你可以运行代码。
答案 0 :(得分:1)
正如Apple在documentation中所述:
在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放用户可听内容的应用,例如音乐播放器应用
- 在后台录制音频内容的应用
- 随时向用户通知其位置信息的应用,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部附件接收定期更新的应用
实施这些服务的应用必须声明他们的服务 支持和使用系统框架来实现相关方面 那些服务。声明服务可以让系统知道哪个 您使用的服务,但在某些情况下,它是系统框架 实际上会阻止您的申请被暂停。
您可以阅读有关在链接中实现和声明这些后台任务的所有内容。但是,如果您的应用程序是另一种类型的应用程序,或者您无法使用系统框架,那么您的应用程序无法无限期地在后台运行。即使是这样,你应该总是期望系统因某种原因停止你的任务(例如,重新启动手机)。