iBeacon:CLBeaconRegion 标识符的设置?
Posted
技术标签:
【中文标题】iBeacon:CLBeaconRegion 标识符的设置?【英文标题】:iBeacon: Settings of CLBeaconRegion identifier? 【发布时间】:2015-01-12 07:55:06 【问题描述】:我使用 Apple AirLocate 演示 App 来创建 iBeacon。
标识符:com.example.apple-samplecode.AirLocate UUID:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 专业:0 轻微:0 实测功率:-59android 信标检测器应用成功接收到信号。
但是,当我在 ios 8 中使用以下代码检测 iBeacon 时,信标不显示:
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
收到了这个:
操作无法完成。 (kCLErrorDomain 错误 4。)
网上查了一些资料,错误码4的意思是:
用户拒绝访问区域监控服务。
但是我使用下面的代码来证明我的应用被授权监控区域:
- (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");
它返回:
didChangeAuthorizationStatus:使用时已授权
鉴于:
我正在使用装有 iOS 8.1.2 的 iPhone 5s 我在Info.plist
中添加了NSLocationWhenInUseUsageDescription
在功能页面中,我启用了“位置更新”和“使用蓝牙 LE 配件”(Xcode 将相应条目添加到 Info.plist
)
通过[self.coreLocation requestWhenInUseAuthorization]
请求“使用时”授权
首次启动应用时允许“定位服务”和“推送通知”
飞行模式已关闭
蓝牙已开启
Wi-Fi 已开启,已连接到互联网
设置 > 常规 > 后台应用刷新已开启
设置 > 隐私 > 位置服务 > 我的应用 > 使用时(打勾)
[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]
返回是
我错过了什么导致此错误 4 ?还有,标识符是否必须与 iBeacon 的 Bundle Identifier 匹配(为什么 Android 可以检测所有的 Beacon,而 iOS 需要指定标识符)?
参考:Region Monitoring and iBeacon
【问题讨论】:
尝试添加[_locationManager startRangingBeaconsInRegion:beaconRegion]; [_locationManager requestStateForRegion:beaconRegion];并确保错误地添加了 NSLocationWhenInUseUsageDescription。你的代码看起来不错 【参考方案1】:几个建议:
尝试使用 AppStore 中现成的 iOS 检测器,例如 Locate,以消除硬件问题。
如果上述方法有效,请尝试卸载并重新安装您的应用。如果在应用程序运行后添加授权代码,我已经看到位置权限被搞砸了。
此外,发布您的 Info.plist 可能会有所帮助,以防出现问题。
【讨论】:
重启设备解决了权限问题。不知道为什么。以上是关于iBeacon:CLBeaconRegion 标识符的设置?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CoreLocation 获取多个 iBeacon?
iOS ibeacon 标识符 initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier?