如何在地理围栏后进行 BG NW 下载 didEnterRegion/didExitRegion 通知

How to do BG NW download after geofence didEnterRegion/didExitRegion notice

我正在为客户端开发一个 client/server 应用程序,客户端是 iOS 台设备。

一个客户端模块供出差销售人员使用。

我的客户希望销售人员的应用程序在销售人员离开办公室时以及销售人员 returns 到办公室时自动下载其本地数据库。

我正在使用位置管理器的 startMonitoringForRegion 方法设置地理围栏,并将在启动时查找 UIApplicationLaunchOptionsLocationKey,以及查找对位置管理器的调用 locationManager:didEnterRegion /locationManager:didExitRegion 来自后台的方法。

我的问题是,我如何要求系统允许我有时间建立网络连接并下载新数据以响应使用 UIApplicationLaunchOptionsLocationKey 启动的应用程序或对 [=13] 的后台调用=]/locationManager:didExitRegion?

None 个背景模式键 (UIBackgroundModes) 看起来很合适。

我不需要 location 密钥,因为我不需要实时位置信息,只需要地理围栏 enter/exit 消息。 fetch 键也不是我需要的,因为这会导致系统在它选择的时间在后台唤醒我的应用程序。

是否必须设置其中一个后台模式键才能拨打 beginBackgroundTaskWithExpirationHandler 电话?

我想我应该做的是在 locationManager:didEnterRegion/locationManager:didExitRegion 方法中的 beginBackgroundTaskWithExpirationHandler 中提交我的网络请求。系统是否允许我在没有设置 UIBackgroundModes 键的情况下执行此操作?

如果我已经从后台 运行,我可以打电话给 beginBackgroundTaskWithExpirationHandler 吗? (在应用程序 运行 但不是最前面的情况下,出现 locationManager:didEnterRegionlocationManager:didExitRegion 调用。)我的目标是要求足够的后台时间来处理我的网络下载和保存数据到我的本地数据库。

任何做过类似事情的人的指导都会有很大的帮助。文档非常模糊,通过反复试验弄清楚如何使用后台 API 可能非常耗时。

P.S。我在 Swift 开发此应用程序,尽管我是 Objective-C 的长期开发人员。我很乐意根据需要将 Objective-C 翻译成 Swift 或混合使用 Objective-C 和 Swift,因此任何一种语言的示例都会很有用。

可以从后台调用 beginBackgroundTaskWithExpirationHandler。自 iOS8 起,此调用会将您的 运行 时间从 10 秒延长至 180 秒。

请记住,您需要请求 Always 位置服务授权,这是 运行 区域监控所需要的。

我建议您使用后台 位置 键。我忘记在我的一个应用程序中设置它,它仍然在接收区域 enter/exit 事件。然而,

-- 行为可能会随着较小的 iOS 升级而改变,并且

-- 应用可能被苹果拒绝