ios - geofence didEnterRegion/didExitRegion通知后如何进行BG NW下载

标签 ios objective-c swift cllocationmanager background-process

我正在为客户端开发客户端/服务器应用程序,客户端是 iOS 设备。

一个客户模块适用于出差的销售人员。

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

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

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

没有一个背景模式键 ( UIBackgroundModes) 看起来合适。

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

我是否必须设置其中一个后台模式键才能制作 beginBackgroundTaskWithExpirationHandler称呼?

我想我应该做的是在我的 beginBackgroundTaskWithExpirationHandler 中提交我的网络请求在我的 locationManager:didEnterRegion/locationManager:didExitRegion方法。系统会允许我在没有 UIBackgroundModes 的情况下这样做吗? key 集?

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

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

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

最佳答案

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

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

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

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

-- 应用可能被苹果拒绝

关于ios - geofence didEnterRegion/didExitRegion通知后如何进行BG NW下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484270/

相关文章:

ios - Show Segue 使用错误的presentingViewController,并导致错误的导航

ios - 如何仅使用 Swift playground 构建应用程序?

ios - 像素化的 UIButton 边缘

javascript - iOS 的 UIWebView 使用的 JavaScript 引擎的名称是什么?

ios - 为什么 NSNumber 从一个函数到另一个函数变成零?

ios - 如何隐藏导航栏后退按钮?

ios - 如何像 Apple Music 一样创建 UIActionSheet 或 UIAlertController(UIAlertControllerStyleActionSheet)?

json - Swift 2 如何获取 JSON 值

ios - 应用程序从后台重新出现后动画将不起作用

ios - 初始化NSString的长度限制