ibeacon 将无法工作
ibeacon will not work
在info.plist
中:
我们添加了 NSLocationAlwaysUsageDescription
。
在 required background modes
上,我们添加了所有蓝牙内容(通过蓝牙通信和共享数据)和位置 - "register for location updates"
我们已经导入了 location and bluetooth frameworks
和基础。
我们正在启动蓝牙:
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[self.locationManager requestAlwaysAuthorization];
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
NSUUID *uuid_in = [[NSUUID alloc] initWithUUIDString:uuid];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid_in identifier:@"com.name.us"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
代表被称为:
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"started:%@",region);
//[self.locationManager requestStateForRegion:self.beaconRegion];
self.beaconRegion.notifyEntryStateOnDisplay=YES;
}
问题是,当我们打开硬件信标(正在与其他应用程序一起工作检查)时,委托 没有被调用 (iPhone6):
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
要检查的几件事:
在隐私设置中,确保选中您的应用以允许位置访问。我不确定当您在代码中调用这两个时会发生什么:
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
确认 UUID 是否传递给 initWithProximityUUID。这将需要匹配您有兴趣查找的信标。
将 monitoringDidFailForRegion 添加到您的代码中,看看您得到了什么...
(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
NSLog(error);
}
一些提示:
你应该只做这两个中的一个。如果你有第一行,就去掉第二行。 (你也有上面重复的相同的第一行。)
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
不需要特殊的背景模式。
不需要蓝牙框架。
您正在修改您的 CLBeaconRegion
,然后再初始化。 self.beaconRegion.notifyOnEntry=YES;
开头的行需要下移到初始化后
确保 uuid_in
中定义的 ProximityUUID 与您的信标实际匹配。请 post 提供初始化代码,以便我们确定。
尝试卸载并重新安装您的应用程序。确保在首次启动时收到位置权限提示并接受。如果您没有收到提示,则说明有问题。
在info.plist
中:
我们添加了 NSLocationAlwaysUsageDescription
。
在 required background modes
上,我们添加了所有蓝牙内容(通过蓝牙通信和共享数据)和位置 - "register for location updates"
我们已经导入了 location and bluetooth frameworks
和基础。
我们正在启动蓝牙:
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[self.locationManager requestAlwaysAuthorization];
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
NSUUID *uuid_in = [[NSUUID alloc] initWithUUIDString:uuid];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid_in identifier:@"com.name.us"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
代表被称为:
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"started:%@",region);
//[self.locationManager requestStateForRegion:self.beaconRegion];
self.beaconRegion.notifyEntryStateOnDisplay=YES;
}
问题是,当我们打开硬件信标(正在与其他应用程序一起工作检查)时,委托 没有被调用 (iPhone6):
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
要检查的几件事:
在隐私设置中,确保选中您的应用以允许位置访问。我不确定当您在代码中调用这两个时会发生什么:
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
确认 UUID 是否传递给 initWithProximityUUID。这将需要匹配您有兴趣查找的信标。
将 monitoringDidFailForRegion 添加到您的代码中,看看您得到了什么...
(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
NSLog(error);
}
一些提示:
你应该只做这两个中的一个。如果你有第一行,就去掉第二行。 (你也有上面重复的相同的第一行。)
[self.locationManager requestAlwaysAuthorization ]; [self.locationManager requestWhenInUseAuthorization];
不需要特殊的背景模式。
不需要蓝牙框架。
您正在修改您的
CLBeaconRegion
,然后再初始化。self.beaconRegion.notifyOnEntry=YES;
开头的行需要下移到初始化后确保
uuid_in
中定义的 ProximityUUID 与您的信标实际匹配。请 post 提供初始化代码,以便我们确定。尝试卸载并重新安装您的应用程序。确保在首次启动时收到位置权限提示并接受。如果您没有收到提示,则说明有问题。