当用户退出地理围栏时触发事件

时间:2014-04-07 08:41:14

标签: ios gps geofencing

有没有办法在iOS设备的当前位置周围定义地理围栏(中心和半径),并让设备在设备退出地理围栏时触发我的应用程序中的回调功能?这种机制会唤醒一个封闭的应用吗?

我希望避免广泛的GPS使用,所以我更倾向于使用定期GPS轮询的系统信息,即使是以降低的准确性为代价。

2 个答案:

答案 0 :(得分:4)

您的解决方案是Region Monitoring

  

在iOS中,始终跟踪与您的应用相关联的区域,   包括你的应用程序没有运行时。如果是区域边界   当应用程序未运行时交叉,该应用程序将重新启动   处理事件的背景。同样,如果应用程序被暂停   当事件发生时,它被唤醒并给予少量   处理事件的时间(大约10秒)。

每当应用程序请求进行区域监控时,iOS都会采用支持。您的应用程序注册了一些位置,并要求iOS监控该区域&在准确准确地进入或离开该区域时通知。

CLRegion *region = [[CLCircularRegion alloc] initWithCenter:[location coordinate] radius:250.0 identifier:[[NSUUID UUID] UUIDString]];

现在iOS接受此请求&使用内部标识将其添加到区域监控的系统队列中。一旦设备进入该区域或退出该区域,iOS就会向应用程序发送通知以启动解雇代表。

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region

请注意,如果您的应用在后台运行,一旦设备进入/存在注册区域,iOS将使您的应用在后台启动。

这是FourSquare&的关键点之一。其他类似的应用程序trie执行大量的位置数据收集和将其发送到服务器&在很短的时间内为用户提供量身定制的消息。

答案 1 :(得分:3)

Apple documentation for Region Monitoring

Perfect tutorial which teaches you to build a geo fence step by step in ios

以下是用户进入和退出某个区域时触发的委托方法!

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Welcome to %@", region.identifier);
}


-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"Bye bye");
}

-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"Now monitoring for %@", region.identifier);
}