iOS CoreBluetooth / iBeacon:CBPeripheralManager不能在应用内广告两个advertisementData

时间:2013-12-01 15:50:43

标签: core-bluetooth ibeacon

我的应用程序上有两个开关,它们可以将我的应用程序转换为外围设备或中央设备(BLE连接中的两个角色)。当应用程序角色作为外围设备时,我初始化两个CBPeripheralManagers,一个用于广告ibeacon和另一个对于BLE连接。我想做的是当另一个设备角色作为中心进入外围设备的范围时,它可以检测到信标,同时,它扫描外围设备,然后连接到外围设备。当连接建立时,中央将一些数据发送到外围设备。

这是我的问题:

我这样初始化外围设备:

_peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; // for BLE connection
_beaconPeripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
_beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil];

_beaconPeripheralManager startAdvertising:_beaconPeripheralData;
[_peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:UUID]] }];

init central就像这样:

 NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:UUID];
_beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.nikotung.ibeacon"];
[_locationManager startMonitoringForRegion:self.beaconRegion];
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
    [_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:UUID],[CBUUID UUIDWithString:BEACON_UUID]]
                                            options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];

如果我同时宣传两个外围设备,在中央端,我永远不会发现外围设备(_peripheralManager)而只发现信标(_beaconPeripheralManager)。 代表

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

从未打过电话。

但如果我只打开_peripheralManager广告,中央方可以发现它并委托被召集。

这是否意味着我们不能同时宣传两个外围设备,或者日期大小有限。

从Apple的文档中可以看出只有两个键CBAdvertisementDataLocalNameKeyCBAdvertisementDataServiceUUIDsKey可以做广告。但我发现_beaconPeripheralData包含一个让我感到困惑的键kCBAdvDataAppleBeaconKey。< / p>

因此,我可以做些什么来制作应用程序,可以宣传两个外围设备并正常工作。

2 个答案:

答案 0 :(得分:0)

i 组合信标和外​​围设备的广告数据,并将其与1个外设管理器实例一起使用;它似乎适用于iOS(7.0),但不适用于OSX(10.9)

答案 1 :(得分:0)

信标外围数据和描述您的BLE服务的外围数据都是 NSDictionary ,您可以通过 NSMutableDictionary 将这两者合并为一个并将需求数据广播为一个