iBeacon:CLBeaconRegion 标识符的设置?
iBeacon: Settings of CLBeaconRegion identifier?
我使用 Apple AirLocate 演示应用程序来创建一个 iBeacon。
- 标识符:com.example.apple-samplecode.AirLocate
- UUID:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
- 专业:0
- 未成年人:0
- 测量功率:-59
信号成功被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
鉴于:
- 我正在使用 iPhone 5s 和 iOS 8.1.2
- 我在
Info.plist
中添加了NSLocationWhenInUseUsageDescription
- 在功能页面,我启用了"Location updates"和"Uses Bluetooth LE accessories"(Xcode添加了相应的条目到
Info.plist
)
- 通过
[self.coreLocation requestWhenInUseAuthorization]
请求"When In Use"授权
- 首次启动应用程序时允许 "Location Service" 和 "Push Notification"
- 飞行模式关闭
- 蓝牙已开启
- Wi-Fi 已开启,已连接到互联网
- 设置 > 通用 > 后台应用刷新已开启
- 设置>隐私>定位服务>我的应用程序>使用时(打勾)
[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]
returns 是
我错过了什么导致了这个错误 4?还有,identifier是否需要和iBeacon的Bundle Identifier匹配(为什么Android可以检测到所有的beacon,但是iOS需要指定identifier)?
一些建议:
尝试使用来自 AppStore 的现成 iOS 检测器,例如 Locate 来消除硬件问题。
如果上述方法有效,请尝试卸载并重新安装您的应用。如果在应用已经 运行.
之后添加授权码,我已经看到位置权限搞砸了
此外,如果出现问题,post 您的 Info.plist 可能会有所帮助。
我使用 Apple AirLocate 演示应用程序来创建一个 iBeacon。
- 标识符:com.example.apple-samplecode.AirLocate
- UUID:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
- 专业:0
- 未成年人:0
- 测量功率:-59
信号成功被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
鉴于:
- 我正在使用 iPhone 5s 和 iOS 8.1.2
- 我在
Info.plist
中添加了 - 在功能页面,我启用了"Location updates"和"Uses Bluetooth LE accessories"(Xcode添加了相应的条目到
Info.plist
) - 通过
[self.coreLocation requestWhenInUseAuthorization]
请求"When In Use"授权
- 首次启动应用程序时允许 "Location Service" 和 "Push Notification"
- 飞行模式关闭
- 蓝牙已开启
- Wi-Fi 已开启,已连接到互联网
- 设置 > 通用 > 后台应用刷新已开启
- 设置>隐私>定位服务>我的应用程序>使用时(打勾)
[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]
returns 是
NSLocationWhenInUseUsageDescription
我错过了什么导致了这个错误 4?还有,identifier是否需要和iBeacon的Bundle Identifier匹配(为什么Android可以检测到所有的beacon,但是iOS需要指定identifier)?
一些建议:
尝试使用来自 AppStore 的现成 iOS 检测器,例如 Locate 来消除硬件问题。
如果上述方法有效,请尝试卸载并重新安装您的应用。如果在应用已经 运行.
之后添加授权码,我已经看到位置权限搞砸了
此外,如果出现问题,post 您的 Info.plist 可能会有所帮助。