ibeacon无法运作

时间:2015-05-19 12:48:32

标签: ios core-bluetooth ibeacon

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 {

2 个答案:

答案 0 :(得分:2)

一些提示:

  1. 你应该只做这两个中的一个。如果你有第一行,摆脱第二行。 (你上面重复了第一行。)

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

  2. 无需特殊的背景模式。

  3. 不需要蓝牙框架。

  4. 您正在修改CLBeaconRegion,然后才能进行初始化。以self.beaconRegion.notifyOnEntry=YES;开头的行需要向下移动到初始化之后。

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

  6. 尝试卸载并重新安装您的应用。确保首次启动时提示您输入位置权限并接受。如果没有收到提示,那就出错了。

答案 1 :(得分:1)

要检查的事情:

在隐私设置中,请确保您的应用已选中“允许位置访问”。我不确定当你在你的代码中调用这两个时会发生什么:

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

确认UUID是否传递给initWithProximityUUID。这需要匹配您感兴趣的信标。

将monitoringDidFailForRegion添加到您的代码中,看看你得到了什么......

(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
    NSLog(error);
}