概述
我的公司要求我发布一个可以每两个小时检查一次设备位置的应用程序。该应用程序将通过 TCP/IP 套接字将这些位置数据发送到我的服务器,然后根据这些数据接收相应的信息(直接通过相同的 TCP/IP 套接字)。所以我并不想让我的应用程序在后台模式下连续运行(实际上,这似乎是 iOS 中的热门话题,而且它也不适合我的项目)。
问题
为了可靠,实现这一目标的最佳实践是什么?所以,我想知道:
- 由于我的应用程序已暂停(= 不活动),Apple 是否允许在唤醒时打开套接字以发送位置
didUpdateToLocation
? - 我必须通过我的套接字执行我的发送/接收任务多长时间?
- 我应该创建一个真正的后台任务
beginBackgroundTaskWithExpirationHandler
并使用 Cocoa 允许的 10 分钟来执行我的发送/接收任务吗? - 有可能(Apple 允许)每 2 小时要求一个 10 分钟的后台任务,无需人工交互(即用户应该重新打开应用程序等)?
到目前为止我取得的/发现的
- 我在我的应用程序处于非活动状态时添加了
location
密钥Info.plist
以便能够运行didUpdateToLocation
处理程序。 - 当我的应用程序处于前台(= 活动)时,我能够通过我打开的套接字发送和接收数据。
- 我试图检查
backgroundTimeRemaining
何时didUpdateToLocation
被调用。我得到了一个非常大的结果数字,这似乎很正常,因为此时,applicationState
is 不是 inUIApplicationStateBackground
而是 inUIApplicationStateActive
。
这些点在官方文档中不是很清楚,也没有找到与我的具体案例相关的话题。
谢谢你的帮助。