我一直致力于开发一款通过地理围栏功能利用基于位置的提醒的新应用。
据我了解,为了做到这一点,应用程序必须通过以下方式请求授权:
CLLocationManager.requestAlwaysAuthorization()
到目前为止,它按预期工作,但我很好奇,例如" Reminders"应用程序,以及其他如Omnifocus仅请求"何时使用"或者:
locationManager.requestWhenInUseAuthorization()
这些应用仍然能够提供基于位置的提醒,而无需始终请求授权。我还注意到这些应用程序不会触发"位置"我的应用程序在后台状态栏上的状态栏上的图标。他们如何让这些应用程序提供这些通知呢?
谢谢!
d
答案 0 :(得分:2)
在观看iOS 8的WWDC CLLocation更新时找到答案:
https://developer.apple.com/videos/wwdc/2014/?id=706
提醒和类似的应用程序在不需要AlwaysAuthorization的情况下工作,因为它们利用了UILocalnotification框架更改。从iOS 8开始,它支持基于区域的触发。
所以现在如果你不需要实际"启动"您的应用程序在后台运行,并在位置更改时执行操作,只需显示通知,您只需使用UILocalNotification和RegionBased Triggering即可。
@NSCopying var region: CLRegion!
在iOS8中,UILocalnotification拥有'区域'属性,对应于CLRegion对象。
来自Apple文档: 为此(区域)属性分配值会导致在用户跨越区域边界时传递本地通知。区域对象本身定义在用户进入或退出区域时是否触发通知。此属性的默认值为nil。
您可以为此属性或fireDate属性指定值,但不能同时指定两者。尝试安排包含区域和开火日期的本地通知会引发异常。