【问题标题】:Trigger an event when the user exits a geofence当用户退出地理围栏时触发事件
【发布时间】:2016-04-05 02:13:48
【问题描述】:

有没有办法在 iOS 设备的当前位置周围定义地理围栏(中心和半径),并在设备退出地理围栏时让系统在我的应用中触发回调函数?这种机制能否唤醒已关闭的应用?

我想避免大量使用 GPS,因此我更喜欢系统消息而不是定期 GPS 轮询,即使以降低准确性为代价。

【问题讨论】:

  • 想一想这样一种情况,您在区域监控中不断添加用户当前位置,半径为 100 米,用户在几分钟内移动了该距离并退出该位置。然后委托被解雇。在委托中,您再次将用户的当前位置注册到区域监控中。您实际上是在跟踪用户。 :-)

标签: ios gps geofencing


【解决方案1】:

您的解决方案是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 和其他类似应用程序如何尝试执行大部分位置数据收集并将其发送到服务器并在短时间内为用户提供定制消息的关键点之一。

【讨论】:

  • 我知道这个问题已经很久了,但是在地理围栏中我遇到了问题。我选择了 100 米半径,应该会出现“退出时”通知。但我在 250 米左右收到通知。请帮帮我。
【解决方案2】:

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);
}

【讨论】:

  • 是的,文档指定了这一点!一旦设备进入地理围栏,应用程序将唤醒并调用委托方法!
  • @AdamMatan :我已经解释过,当您的应用注册区域监控时,iOS 在内部会做什么。
  • @BalramTiwari 感谢您的详细解释! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多