iOS蓝牙开发 --- 唯一标识问题

需求:

当我们使用CoreBluetooth系统框架进行蓝牙开发的时候,有时因为某种功能需求需要拿到特定的蓝牙设备进行特定的操作,这就需要我们拿到能够代表特定的蓝牙设备的唯一标识,通过唯一标识来确认是哪一台蓝牙设备

 

唯一标识的选择:

1、蓝牙设备的名字

2、蓝牙设备服务的UUID

3、继承于父类CBPeer的identifier的标识符属性

4、蓝牙的Mac地址

//蓝牙设备的名字
@property(retain, readonly, nullable) NSString *name;
 
//继承于父类CBPeer的identifier的标识符属性
@property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(NA, 7_0);

 

获取唯一标识的位置:

在搜到外设的回调方法

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

中的advertisementData包含了  蓝牙设备的名字 (advertisementData[@"kCBAdvDataLocalName"])蓝牙设备服务的UUID(advertisementData[@"kCBAdvDataServiceUUIDs"][0])

在peripheral中:(继承于父类CBPeer的identifier的标识符属性)包含了identifier属性,identifier中的UUIDString可以用来作为唯一标识(peripheral.identifier.UUIDStringPS:不同的中心设备(也可以说是不同的手机)对于同一台蓝牙设备,获取到的UUIDString是不一样的。)

苹果公司出于安全考虑,并没有对我们开放获取蓝牙设备的mac地址的接口(安卓开发是可以获取的),如果想要获取到mac地址,方法有两种:(PS:不同的中心设备(也可以说是不同的手机),同一台外设,获取到的Mac地址是完全一样的)

第一种:连接蓝牙设备之前:将mac地址放在蓝牙设备的广播数据之中,然后在广播的时候,将mac地址以广播的形式发送出来以供我们获取。(将mac地址写入外设的名字中(PS:我们的外设开发说 外设名字字段长度有限制,无法将mac地址放入Name中))

第二种:连接蓝牙设备之后:将mac地址写在某一个特征通道中,通过某一个特征通道来获取mac地址。

 

 

你可能感兴趣的:(IOS)