我认为你应该重新考虑你对这个应用程序的方法。听起来您已经决定构建一组功能,这些功能不一定充分了解或非常适合运行应用程序的设备的特征。
您写道“应用程序每 n 分钟获取一次位置”,但这不是 iOS 定位服务的工作方式。当您的应用程序在前台运行时,偶尔查询当前位置的位置服务是一种好方法,但一旦暂停或终止,这不是一个选项。相反,您需要以某种程度的准确度订阅位置事件,并且当设备的位置发生变化时,您的应用会收到通知。无法保证您收到这些事件的时间表,它会根据您要求的准确性和设备移动的速度而有所不同。
此外,获取位置是一项昂贵的操作,并且会很快耗尽设备的电池。在一两个小时内消耗用户的可用电池电量是快速卸载应用程序的好方法。在可能的情况下,您应该使用重要的位置更改服务以最小的功耗获得低精度的位置更新。如果您需要更高的精度,请考虑对定义的区域使用边界交叉事件,或者至少尽可能降低您要求的精度。
有了所有这些,您仍然需要在有限的时间内工作,一旦通过位置更新启动您的应用程序就必须运行。这可能不足以往返服务器。如果网络连接已经处于活动状态并且设备恰好具有低延迟,您可能会在某些时候收到响应,但我希望看到应用程序经常被操作系统终止。发生这种情况时,我不知道您是否会继续收到位置更新,否则可能会重新启动该应用程序。
与其下载警报列表并在本地显示它们,更好的解决方案可能是在您看到重大位置变化时尝试通过 UDP 将您的当前位置发送到服务器。这样您就可以在不等待响应的情况下触发网络请求。只有其中一些请求仍然会成功,但至少您的应用不会被终止。然后,您可以处理您在服务器上收到的位置,并在适当的时候发送推送通知。
我意识到您似乎无法进行服务器端更改。在这种情况下,您可以做的最好的事情是在应用程序运行时预先获取附近区域的警报(如果您曾经设法在后台完成往返)。这样,您可以将位置更新与该列表进行比较,而无需在每次位置更新时触发网络请求。不幸的是,听起来您可能会陷入困境,在您当前的限制下没有可靠的解决方案可用。