关闭iBeacons监控背景并关闭应用程序

时间:2015-03-25 18:55:17

标签: ios core-location ibeacon

我正在使用IBeacon构建一个简单的ios应用程序,我使用startMonitoringForRegion来检测信标。这是AppDelegte.m代码:

    NSUUID *beaconUUID = [[NSUUID alloc] initWithUUIDString:@"0040C159-12F6-4FC3-9189-87C069FFE5CF"];
    NSString *regionIdentifier = @"iBeacons region 1";
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: beaconUUID identifier: regionIdentifier ];
    self.beaconRegion.notifyEntryStateOnDisplay = YES;
    self.locationManager = [[CLLocationManager alloc]init];
    self.locationManager.delegate = self;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    [self.locationManager startMonitoringForRegion:self.beaconRegion];
    [self.locationManager startRangingBeaconsInRegion:beaconRegion];

然后在didDetermineState回调:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{

    if (state == CLRegionStateInside) {
        //Start Ranging
        [manager startRangingBeaconsInRegion:(CLBeaconRegion*) region];
        NSLog(@"didDetermineState -->enter region");
    }
    else{
        //Stop Ranging
        [manager stopRangingBeaconsInRegion:(CLBeaconRegion*) region];
        NSLog(@"didDetermineState -->exit region");
    }

}

当iBeacons相互远离时,这在前景,背景或应用关闭时工作正常。但是当iBeacons相互靠近时,我发现了一些问题。

在进行了多次测试之后,我得出结论,RangingBeaconsInRegion不会在后台工作或关闭app,只有监控工作。

当您进入或退出信标区域时,应用程序将在后台启动约5秒,并且它将获得对didDetermineState:forRegion:方法的回调。你可以在这五秒钟内完成后续操作,之后iOS会再次暂停你的应用程序。

当iBeacons彼此远离时,这是完美的。当iBeacons太靠近并且回调didDetermineState时,问题就出现了:在你进入下一个iBeacon区域之前没有要求退出iBeacon区域。

有没有办法强制手动退出区域?或者其他一些方法来解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:4)

这是一个真正的问题。当信标有重叠传输而你的区域包含所有这些信息时,你就不会获得进入/退出事件,因为一个消失而另一个消失。

有很多方法可以解决这个问题,但没有一种方法可以解决这个问题。你可以:

  • 在后台延长最多3分钟。
  • 构建您的信标标识符和区域,以便尽可能地获得退出/进入事件。

您可以在此处阅读第一项技术的更详细讨论:http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html