iBeaconでExitRegionからEnterRegionになるまでに時間がかかる場合があります
ビーコンの検知までに時間がかかる事象が発生しています。
再現手順は、
①[self findBeacon]; を実行して検知を開始する
②ビーコンをONにする
③「EnterRegion.」「CLRegionStateInside.」が表示される
④「FindBeacon.」が表示されビーコンを検知
⑤ビーコンをOFF
⑥しばらくすると「ExitRegion」「CLRegionStateOutside」が表示される
⑦ビーコンをONにする
この後に「EnterRegion.」「CLRegionStateInside.」が表示されるまでに時間がかかる場合があります。
iPhone5(iOS8.4.1)で試しているんですが、30秒程度かかる場合もあれば2、3秒で表示される場合もあります。
別の端末だと、2分以上かかる場合もありました。
「EnterRegion.」にならないとビーコンが検知されないようなので困っています。
実装のやり方として間違っているところがありますでしょうか?
よろしくお願い致します。
- (void)findBeacon {
CLLocationManager *locationManager = [CLLocationManager new];
[locationManager startMonitoringForRegion:beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"startMonitoring");
[manager requestStateForRegion:region];
}
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
switch (state) {
case CLRegionStateInside:
NSLog(@"CLRegionStateInside");
CLBeaconRegion *beaconRegion = (CLBeaconRegion*)region;
[manager startRangingBeaconsInRegion:beaconRegion];
break;
case CLRegionStateOutside:
NSLog(@"CLRegionStateOutside");
break;
}
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"EnterRegion.");
[manager startRangingBeaconsInRegion:(CLBeaconRegion*)region];
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"ExitRegion.");
[manager stopRangingBeaconsInRegion:(CLBeaconRegion *)region];
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
NSLog(@"FindBeacon.");
}