iOS之BLE开发如何多台设备确定唯一设备

因为项目需要,通过手机蓝牙连接门锁,我们需要连接指定设备,因此就需要我们拿到能够代表特定的蓝牙设备的唯一标识,通过唯一标识来确认是哪一台蓝牙设备。
  在CoreBluetooth系统框架中,我们能够看到当我们通过中心模式扫描到蓝牙设备的时候,我们可以获取到以下的一些属性:蓝牙设备的名字、信号强度、状态、服务、标志符。

//蓝牙设备的名字  
@property(retain, readonly, nullable) NSString *name;  
//蓝牙设备的信号强度  
@property(retain, readonly, nullable) NSNumber *RSSI NS_DEPRECATED(NA, NA, 5_0, 8_0);  
//蓝牙设备是否连接的状态  
/** 
        断开连接 
    CBPeripheralStateDisconnected = 0, 
        正在连接 
    CBPeripheralStateConnecting, 
        已经连接 
    CBPeripheralStateConnected, 
        正在断开连接 
    CBPeripheralStateDisconnecting 
*/  
@property(readonly) CBPeripheralState state;  
//蓝牙设备包含的服务  
@property(retain, readonly, nullable) NSArray *services;  
//继承于父类CBPeer的identifier的标识符属性  
@property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(NA, 7_0);

方式一 通过蓝牙外设的UUIDString区分唯一设备
对于同一台蓝牙设备,我的手机进行扫描,然后读取它的UUIDString,和你的手机进行扫描,获取到的UUIDString是不同的。所以无法区分确定唯一性

方式二 蓝牙外设的name属性不一致
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;
通过此代理我们可以获取到peripheral.name进行唯一设备对比然后进行连接,此方案必须要硬件出厂时写入蓝牙名字都不一致同时录入后台系统。

方式三 蓝牙外设的名字都相同,但是还是需要确定连接唯一设备,那就只能杀手锏了mac地址

  • 获取方法1:将mac地址放在蓝牙设备的广播数据之中,然后在广播的时候,将mac地址以广播的形式发送出来以供我们获取。
  • 获取方法2:将mac地址写在某一个特征通道中,当我们连接蓝牙设备之后,通过某一个特征通道来获取mac地址。
  • 获取方法3:通过对蓝牙设备service的characteristic特征值,进行截图和拼接,具体方法见此博客----MacPu博客

********将来的你一定会感激现在拼命的自己,愿每一个努力的人都能有收获!********
我的传送门: 个人博客 CSDN github
微信公众号:搞事情的程序猿

你可能感兴趣的:(iOS之BLE开发如何多台设备确定唯一设备)