2014-04-29 119 views
0

我很困惑。iBeacons發送和接收UUID

我創建使用CLBeaconRegion和廣告它與CBPeripheralManager信標:

- (void)startTransmitting:(NSUUID*)uuid major:(NSInteger)major minor:(NSInteger)minor identifier:(NSString*)identifier { 
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid 
                   major:major 
                   minor:minor 
                  identifier:identifier]; 

    self.beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil]; 
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self 
                    queue:nil 
                    options:nil]; 
} 

-(void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { 
    if (peripheral.state == CBPeripheralManagerStatePoweredOn) { 
     NSLog(@"Powered On"); 
     [self.peripheralManager startAdvertising:self.beaconPeripheralData]; 
    } else if (peripheral.state == CBPeripheralManagerStatePoweredOff) { 
     NSLog(@"Powered Off"); 
     [self.peripheralManager stopAdvertising]; 
    } 
} 

,我能夠與CBCentralManager收到iBeacon顯示:

self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
[self.centralManager scanForPeripheralsWithServices:nil options:nil]; 

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 
    [self.peripherals addObject:peripheral]; 
    NSLog(@"New Peripheral found and added... %@", peripheral); 
} 

這基本上工作。但傳輸和接收的UUID是不同的 - 在我看來應該是相同的。

- >我做錯了什麼/明白錯誤?

回答

1

問題是您用CBCentralManager閱讀的UUID與iBeacon的ProximityUUID無關。

儘管在這兩個字段中使用了術語UUID,但它們完全不同。您可以通過CBCentralManager查看的字段只是由iOS生成的會話特定標識符。如果您稍後使用相同的API來發現相同的設備,它將會是一個不同的值。

不幸的是,不可能使用CoreBluetooth API讀取iBeacon標識符。有關爲什麼參見this blog post的更多信息。

+0

謝謝你的回答!這些現在很清楚。 – Marco