didRangeBeacons回调总是用空的信标数组触发

时间:2018-03-02 08:16:47

标签: ios core-location ibeacon

我在iOS中使用核心位置库来查找信标,我在信标区域,并且didRangeBeacons回调正在触发,但它总是返回一个空的信标数组。

请查看随附的示例代码。我已经对iPhone进行了直接信标,但是当应用程序打开时,信标区域状态仍在内部,并且立即将其更改为外部状态,我们在didRangeBeacons中获得一个空数组。我已经包含了NSLocationWhenInUseUsageDescription。 NSLocationAlwaysUsageDescription键位于info.plist中。应用程序的位置权限设置为"始终"。我同时使用了Estimote和Kontakt信标。操作系统版本为iOS 11.2.6,设备iPhone 5s,Xcode 9.2。

 #import "CoreLocationViewController.h"

@interface CoreLocationViewController ()
{
    CLLocationManager *locationManager;
    CLBeaconRegion *beacon_region;

}
@end

@implementation CoreLocationViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"CoreLocationViewController viewDidLoad");

    NSUUID *ProximityUUID = [[NSUUID alloc] initWithUUIDString:@"b94f62c8-1af4-11e8-accf-0ed5f89f718b"];
    beacon_region = [[CLBeaconRegion alloc] initWithProximityUUID:ProximityUUID identifier:@"abqwercds"];
    [beacon_region setNotifyEntryStateOnDisplay:YES];
    [beacon_region setNotifyOnExit:YES];
    [beacon_region setNotifyOnEntry:YES];

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;

    if ([CLLocationManager locationServicesEnabled]){

        NSLog(@"Location Services Enabled");

        if(IS_OS_8_OR_LATER){

            NSLog(@"We are in LocationServicesRequestViewController IS_OS_8_OR_LATER");

            NSUInteger code = [CLLocationManager authorizationStatus];

            NSLog(@"CLLocationManager authorizationStatus %lu",(unsigned long)code);

            if (code == kCLAuthorizationStatusNotDetermined) {
                NSLog(@"kCLAuthorizationStatusNotDetermined");
                [locationManager requestAlwaysAuthorization];
            }
        }else{
            NSLog(@"We are in LocationServicesRequestViewController IS_OS_8_BELOW");
        }

    }else{
        NSLog(@"authorizationStatus ");
    }

}

#pragma mark Location Manager Delegate methods
- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error{
    NSLog(@"locationManager Error %@",error);
}

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
     NSLog(@"Status of location service is %d",status);
    if ((status == kCLAuthorizationStatusAuthorizedAlways) || (status == kCLAuthorizationStatusAuthorizedWhenInUse)){
         NSLog(@"location service status changed 1");
        [locationManager startMonitoringForRegion:beacon_region];
        [locationManager requestStateForRegion:beacon_region];
    }else{
         NSLog(@"location service status changed 2");
    }
}


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

     NSLog(@"CLLocationManager Beacon Region State Determine ");

    switch (state) {
        case CLRegionStateUnknown:
        {
             NSLog(@" CLLocationManager Region state is unknown %@",region);
            [locationManager stopMonitoringForRegion:beacon_region];
            break;
        }
        case CLRegionStateInside:
        {
             NSLog(@" CLLocationManager Region state is In-Side %@",region);

            [locationManager startRangingBeaconsInRegion:beacon_region];
        }
        case CLRegionStateOutside:
        {
             NSLog(@" CLLocationManager Region state is Out-Side %@",beacon_region);

            [locationManager stopMonitoringForRegion:beacon_region];

            break;
        }
    }

}

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{

     NSLog(@" CLLocationManager Enter into Region %@",region);

    [locationManager startRangingBeaconsInRegion:beacon_region];

}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {

    NSLog(@"didExitRegion location manager %@",region );

    [locationManager stopMonitoringForRegion:beacon_region];

}

-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region{

    NSLog(@"CLLocationManager Beacon Monitoring Started for the region %@",region);

}
-(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error{
    NSLog(@"CLLocationManager Monitoring of beacon region %@ is failed, Error %@",region,error);
}
-(void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error{
    NSLog(@"CLLocationManager ranging of beacon region %@ is failed, Error %@",region.proximityUUID,error);
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region{
    NSLog(@"beacons %@",beacons);
}

Beacon Configuration image Application Location Permission

Logs

Kontakt Beacon configuration

0 个答案:

没有答案