didExitRegion:在我的应用程序被杀或在ios 10中的后台调用时延迟1.5到2分钟

时间:2016-11-05 13:28:41

标签: ios objective-c ios10 ibeacon estimote

我必须使用estimote定位信标,iphone 5s,ios版本10。

didEnterRegion:方法也称为30到40秒的延迟。

我必须使用以下代码来监控ibeacon。

NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"CFC52BF4-FD33-4569-B4B5-5E9C220514A2"];


CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 identifier:@"Technostacks23"];

region.notifyOnEntry = YES;
region.notifyOnExit = YES;
// launch app when display is turned on and inside region
region.notifyEntryStateOnDisplay = YES;

if ([CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]])
{
    [_locationManager startMonitoringForRegion:region];
    [_locationManager startRangingBeaconsInRegion:region];

}

[self.locationManager startUpdatingLocation];



 #pragma mark - CoreLocation Delegate method
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
//local notification fire
}

    -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
//local notification fire
}
请大家告诉我如何解决这个问题。

由于

2 个答案:

答案 0 :(得分:0)

我不认为您可以在同一时间监控某个地区。我在我制作的屏幕上遇到了这个问题,我想向用户展示它们是否在Beacon的范围内。我不得不停止监控,直到他们离开屏幕,然后重新开始监控。如果您不需要用于测距的事件(用户与信标的接近程度),我会将该线路关闭,无需拨打-didEnter-didExit。您也不应该-startUpdatingLocation。这仅适用于有效的位置调用。

参赛活动通常会立即开始。一旦失去信标信号,退出事件就会有20-30秒的延迟。

可能是你正在烧毁你的后台运行时监控,在你没时间停止后,为你开启监控事件的大门。

答案 1 :(得分:0)

  1. startRangingBeaconsInRegion委托方法中调用didEnterRegion方法,以便当信标尚未位于信标区域时,它将不适用于信标范围,这将有助于电源和电池消耗,我相信它会加快区域检测速度。

  2. 修改信标的广告时间间隔为350毫秒或更短。

  3. 在iPhone设置标签中查看允许后台应用刷新和位置始终的应用,并将其反转为不允许并进行测试,看看检测性能是否存在差异。

  4. 但是在所有情况下30到40秒的延迟我发现它是正常的,这取决于已经在后台处理的应用程序的数量和耗尽资源加上它会更好,这取决于你的应用程序模型开始通知区域进入几秒后,以确保他在该地区,并没有如此快速地通过“我正在谈论一个超级市场模型”。

    但是如果这不是你的情况并且你想通过路过来检测一个区域我认为你可以得到的最快将是15 - 20秒,具体取决于你的设备能力,速度,其他后台处理应用程序和信标广告时间间隔。