概述
我的公司要求我发布一个应用程序,可以每两个小时检查设备的位置。该应用程序将通过TCP/IP套接字发送这些位置数据到我的服务器,然后根据这些数据接收相应的信息(立即,并通过同一TCP/IP套接字)。因此,我并不试图使我的应用程序在后台模式下持续运行(实际上,在iOS中似乎是一个热门话题,而且也不适合我的项目)。
问题
为了保证可靠性,实现这个功能的最佳实践是什么?因此,我想知道:
- 由于我的应用程序已挂起(=不活动状态),苹果是否允许在
didUpdateToLocation
唤醒时打开套接字以发送位置? - 我有多长时间可以通过我的套接字执行发送/接收任务?
- 我应该使用
beginBackgroundTaskWithExpirationHandler
创建一个真正的后台任务,并使用Cocoa允许的10分钟来执行我的发送/接收任务吗? - 是否可能(并且被苹果允许)每2小时请求10分钟的后台任务,而无需人工交互(即用户应重新打开应用程序等)?
我已经实现/发现的内容
- 我在我的
Info.plist
中添加了location
键,以便在我的应用程序不活动时运行didUpdateToLocation
处理程序。 - 当我的应用程序处于前台(=活动状态)时,我能够通过打开的套接字发送和接收数据。
- 我尝试在调用
didUpdateToLocation
时检查backgroundTimeRemaining
。我得到了一个非常大的结果数字,这似乎是正常的,因为此时applicationState
不在UIApplicationStateBackground
而在UIApplicationStateActive
中。
官方文档对这些问题并不是很清楚,我没有找到与我的特定情况相关的主题。
感谢您的帮助。
beginBackgroundTaskWithExpirationHandler
不会创建后台任务,而是将当前线程标记为希望在应用程序转入后台时继续运行的东西。 - progrmr