我正在尝试在开发情况下实施iBeacon,我没有用于测试的实际信标。我正在使用Beacon Bits'这是一个在iPad上运行的模拟器。我已经尝试过其他信标仿真器,以消除仿真器可能出现问题的可能性。所以,我正在使用在iPad上运行的模拟器,我的应用程序在iPhone上运行。我没有使用XCode模拟器,两者都是实际设备。
我添加了必要的位置管理器授权,这些授权在iOS8中似乎是必需的。我也确保这些都在我的plist中。
我已经仔细检查过模拟器和运行应该检测信标模拟器的应用程序的设备是否启用了蓝牙。
当我运行应用程序时,没有响应,也没有触发任何位置管理器委托方法。这是我的视图控制器的代码:
-(void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
[self.locationManager requestAlwaysAuthorization];
}
if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
[self.locationManager requestWhenInUseAuthorization];
}
uuid = [[NSUUID alloc] initWithUUIDString:UUID_STRING];
self.region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:BEACON_NAME];
[self.locationManager startMonitoringForRegion:self.region];
[_responseLabel setText:@"Waiting..."];
}
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
[self.locationManager startRangingBeaconsInRegion:self.region];
NSString* foundMessage = [NSString stringWithFormat:@"Region Entered for: %@", BEACON_NAME];
[_responseLabel setText:foundMessage];
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
[self.locationManager stopRangingBeaconsInRegion:self.region];
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
[_responseLabel setText:@"BEACON FOUND"];
CLBeacon* foundBeacon = [beacons firstObject];
NSString* foundMessage = [NSString stringWithFormat:@"Beacon Found: %@", BEACON_NAME];
[_responseLabel setText:foundMessage];
}
有关为何没有回应的任何建议?谢谢!
答案 0 :(得分:2)
试用Apple的示例应用程序AirLocate。 (在Xcode文档中搜索它。)我建议在两台设备上安装它,看看它是否有效。如果是这样,您可以根据接收应用程序测试AirLocate作为发射器,并确定它的发送或接收是否有效。
我的公司在应用程序商店中也有一个名为BeaconTest的应用程序,您可以下载并尝试:
答案 1 :(得分:1)
您可能希望实现locationManager:monitoringDidFailForRegion:withError:
委托,看看它是否会抛出任何内容。
监控信标区域计为iOS上的地理围栏,因此当您开始监控时,状态栏中应该有一个空心的位置服务图标。它也会出现在“设置 - 隐私 - 位置服务”屏幕上应用的行附近。如果不存在,则监控无法正常启动。
我还会实施didDetermineState
代理并检查其内容。我之前遇到过一个地区陷入“未知”的问题。状态。
答案 2 :(得分:0)
我无法看到您的整个实施,但无论如何您是否检查过与您所在地区相关联的UUID是否与iPad的应用广播相同?