iBeacon:CLBeaconRegion 标识符的设置?

iBeacon: Settings of CLBeaconRegion identifier?

我使用 Apple AirLocate 演示应用程序来创建一个 iBeacon。

信号成功被Android信标检测器应用程序接收到。

但是,当我在iOS8中使用以下代码检测iBeacon时,beacon没有出现:

self.coreLocation = [[CLLocationManager alloc] init];
_coreLocation.delegate = self;
NSString *identifier = [NSString stringWithFormat:@"com.example.apple-samplecode.AirLocate.%@", @"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"];
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier];
if(region) {
    region.notifyOnEntry = YES;
    region.notifyOnExit = YES;
    [_coreLocation startMonitoringForRegion:region];
}

无论我在标识符字段中使用哪个值,信标都不会被 CLLocationManager 找到。它的代表 didDetermineState:didRangeBeacons: 从未被召集过。然而,代表 monitoringDidFailForRegion 收到了这个:

The operation couldn’t be completed. (kCLErrorDomain error 4.)

网上查了一些资料,错误码4的意思是:

Access to the region monitoring service was denied by the user.

但我使用以下代码证明我的应用程序已授权监控区域:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if(status == kCLAuthorizationStatusDenied) {
        NSLog(@"didChangeAuthorizationStatus: Denied");
    } else if(status == kCLAuthorizationStatusNotDetermined) {
        NSLog(@"didChangeAuthorizationStatus: Not Determined");
    } else if(status == kCLAuthorizationStatusAuthorizedAlways) {
        NSLog(@"didChangeAuthorizationStatus: Authorized Always");
    } else if(status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        NSLog(@"didChangeAuthorizationStatus: Authorized When In Use");
    } else if(status == kCLAuthorizationStatusRestricted) {
        NSLog(@"didChangeAuthorizationStatus: Restricted");
    } else {
        NSLog(@"didChangeAuthorizationStatus: Unknown");
    }
}

它returns:

didChangeAuthorizationStatus: Authorized When In Use

鉴于:

我错过了什么导致了这个错误 4?还有,identifier是否需要和iBeacon的Bundle Identifier匹配(为什么Android可以检测到所有的beacon,但是iOS需要指定identifier)?

参考:Region Monitoring and iBeacon

一些建议:

  1. 尝试使用来自 AppStore 的现成 iOS 检测器,例如 Locate 来消除硬件问题。

  2. 如果上述方法有效,请尝试卸载并重新安装您的应用。如果在应用已经 运行.

  3. 之后添加授权码,我已经看到位置权限搞砸了

此外,如果出现问题,post 您的 Info.plist 可能会有所帮助。