[英]How to do BG NW download after geofence didEnterRegion/didExitRegion notice
我正在为客户端是iOS设备的客户端开发客户端/服务器应用程序。
一个客户端模块用于旅行销售人员。
我的客户希望销售人员的应用程序在销售人员离开办公室时以及销售人员返回办公室时自动下载本地数据库。
我正在使用位置管理器的startMonitoringForRegion
方法设置地理围栏,并在启动时查找UIApplicationLaunchOptionsLocationKey
,以及从后台查找位置管理器locationManager:didEnterRegion
/ locationManager:didExitRegion
方法的调用。
我的问题是,我如何要求系统允许我有时间建立网络连接并下载新数据以响应使用UIApplicationLaunchOptionsLocationKey
的应用程序启动,或者对locationManager:didEnterRegion
后台调用locationManager:didEnterRegion
/ locationManager:didExitRegion
?
没有任何背景模式键( UIBackgroundModes
)看起来合适。
我不需要location
键,因为我不需要实时位置信息,只需要地理围栏输入/退出消息。 fetch
键也不是我需要的,因为这会导致系统在它选择的时候在后台唤醒我的应用程序。
我是否必须设置一个后台模式键才能进行beginBackgroundTaskWithExpirationHandler
调用?
我想我应该做的是在我的beginBackgroundTaskWithExpirationHandler
中的beginBackgroundTaskWithExpirationHandler
中提交我的网络请求locationManager:didEnterRegion
/ locationManager:didExitRegion
方法。 系统是否允许我在没有UIBackgroundModes
键设置的情况下执行此操作?
如果我已经从后台运行,我可以调用beginBackgroundTaskWithExpirationHandler
吗? (在应用程序正在运行但不是最前面的情况下,并且locationManager:didEnterRegion
或locationManager:didExitRegion
调用进来。)我的目标是要求足够的后台时间来处理我的网络下载并将数据保存到我的本地数据库。
来自那些做过这样的事情的人的任何指导都将是一个很大的帮助。 文档非常含糊,并且通过反复试验来确定如何使用后台API可能非常耗时。
PS我在Swift开发这个应用程序,虽然我是一个长期的Objective-C开发人员。 我很乐意将Objective-C转换为Swift或根据需要混合使用Objective-C和Swift,因此任何一种语言的示例都很有用。
可以从后台调用beginBackgroundTaskWithExpirationHandler 。 从iOS8开始,此调用会将您的运行时间从10秒延长至180秒。
请记住,您需要请求始终授权位置服务,这是运行区域监控所需的。
我建议你使用后台位置键。 我忘记在我的一个应用程序中设置它,它仍然在接收区域进入/退出事件。 然而,
- 随着次要的iOS升级,行为可能会发生变化
- 该应用可能会被Apple拒绝
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.