地理围栏 - 检查用户是否已经在围栏内

时间:2014-09-11 05:04:43

标签: core-location geofencing

iOS 7.1及更高版本中的地理围栏。因此,当用户已经在地理围栏中并且说看到应用程序的广告时,然后从appstore下载应用程序并打开应用程序。此时,应用程序需要向用户提供某个消息(但只有这一次)。如何实现这一目标?

稍后该应用程序注册该区域并正常监视它,以便当用户进入和退出该区域时,将发生特定事情。

我觉得这应该是一个已经解决的问题。即。应该有一种可靠的方法来确定用户是否已经在监控开始时已经在一个区域内,但我没有找到关于如何使用给定API完成此任务的任何指示。

当应用程序启动时,我在iphone 5s中看到以下api序列

 locationManager startMonitoringForRegion
 <location permission popup>
 locationManager:didStartMonitoringForRegion: (in this delegate method i can call the below to check if the device is already inside the region) 
   |-locationManager requestStateForRegion: 
 locationManager:didDetermineState: (fired as a result of the requestStateForRegion: call)

但是locationManager:didDetermineState:也会在区域进入和退出时被调用

 locationManager:didExitRegion:
 locationManager:didDetermineState:

那么我需要存储特定区域的状态并且已经显示了初始消息吗?所以如果那个状态存在就不要显示它......听起来哈克!

1 个答案:

答案 0 :(得分:0)

要确定应用是否在监控开始时位于某个区域内,请执行以下操作:

 [locationManager requestStateForRegion: region];

当CLLocationManager确定给定区域的状态时,会将以下内容发送给其委托:

- (void)locationManager:(CLLocationManager *)manager
      didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
    // When regions are initialized, see if we are already within the geofence.
    switch (state)
    {
        case CLRegionStateInside:
            // We are in the region.
            break;
        case CLRegionStateUnknown:
        case CLRegionStateOutside:
        default:
            break;
    }
}