首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iBeacon: CLBeaconRegion标识符的设置?

iBeacon: CLBeaconRegion标识符的设置?
EN

Stack Overflow用户
提问于 2015-01-12 07:55:06
回答 1查看 1.8K关注 0票数 0

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

  • 标识符: com.example.apple-samplecode.AirLocate
  • UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
  • 主修:0
  • 未成年人:0
  • 测量功率:-59

这个信号是由安卓信标探测器应用程序接收到的successfully信号。

但是,当我使用以下代码检测iBeacon 8中的iOS时,信标将不会显示:

代码语言:javascript
复制
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表示:

用户拒绝访问区域监视服务。

但是,我使用以下代码来证明我的应用程序被授权监视区域:

代码语言:javascript
复制
- (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:授权时使用

鉴于此:

  • 我使用iPhone 5s和iOS 8.1.2
  • 我在NSLocationWhenInUseUsageDescription中添加了Info.plist
  • 在“功能”页面中,我启用了“位置更新”和“使用蓝牙LE附件”(Xcode向Info.plist添加了相应的条目)
  • 通过[self.coreLocation requestWhenInUseAuthorization]请求“何时使用”授权
  • 允许“位置服务”和“推送通知”在应用程序第一次发布期间
  • 飞机模式关闭
  • 蓝牙开着
  • 无线上网,连接互联网。
  • 设置>一般>后台应用程序刷新打开
  • 设置>隐私>位置服务>我的应用程序>使用时(勾选)
  • [CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]返回是

我错过了什么导致这个错误4?另外,是否需要标识符与iBeacon标识符匹配(为什么Android可以检测所有信标,但iOS需要指定标识符)?

参考资料:区域监测与iBeacon

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-12 14:18:29

有几项建议:

  1. 尝试从AppStore (如定位 )中找到现成的定位检测器来消除硬件问题。
  2. 如果上面的工作,尝试卸载和重新安装您的应用程序。我已经看到,如果授权代码是在应用程序运行后添加的,那么这个位置权限就会被搞砸。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27897475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档