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);
}

一些提示:

  1. 你应该只做这两个中的一个。如果你有第一行,就去掉第二行。 (你也有上面重复的相同的第一行。)

    [self.locationManager requestAlwaysAuthorization ]; [self.locationManager requestWhenInUseAuthorization];

  2. 不需要特殊的背景模式。

  3. 不需要蓝牙框架。

  4. 您正在修改您的 CLBeaconRegion,然后再初始化。 self.beaconRegion.notifyOnEntry=YES;开头的行需要下移到初始化后

  5. 确保 uuid_in 中定义的 ProximityUUID 与您的信标实际匹配。请 post 提供初始化代码,以便我们确定。

  6. 尝试卸载并重新安装您的应用程序。确保在首次启动时收到位置权限提示并接受。如果您没有收到提示,则说明有问题。