iOS藍(lán)牙開(kāi)發(fā)(四)藍(lán)牙設(shè)備的唯一標(biāo)識(shí)問(wèn)題(UUID和mac地址)

前言:進(jìn)行本次閱讀在之前,博主默認(rèn)讀者已經(jīng)熟悉CoreBluetooth系統(tǒng)框架,并能夠基本使用。
當(dāng)我們使用CoreBuletooth系統(tǒng)框架進(jìn)行藍(lán)牙開(kāi)發(fā)的時(shí)候,有時(shí)候因?yàn)槟撤N功能需求需要拿到特定的藍(lán)牙設(shè)備進(jìn)行特定的操作,這個(gè)就表示我們能夠拿到代表特定的藍(lán)牙設(shè)備的唯一標(biāo)識(shí),通過(guò)唯一標(biāo)識(shí)來(lái)確認(rèn)是哪一臺(tái)藍(lán)牙設(shè)備。
在正式講解之前,我們先講解基礎(chǔ),在CoreBluetooth系統(tǒng)框架中,我們能夠看到當(dāng)我們通過(guò)中心模式掃描到藍(lán)牙設(shè)備的時(shí)候,會(huì)返回一些屬性:藍(lán)牙設(shè)備的名字、信號(hào)強(qiáng)度、狀態(tài)、服務(wù)、標(biāo)識(shí)符。

//藍(lán)牙設(shè)備的名字
@property(retain, readonly, nullable) NSString *name;
//藍(lán)牙設(shè)備的信號(hào)強(qiáng)度
@property(retain, readonly, nullable) NSNumber *RSSI NS_DEPRECATED(NA, NA, 5_0, 8_0);
//藍(lán)牙設(shè)備的狀態(tài)
/*
typedef NS_ENUM(NSInteger, CBPeripheralState) {
//斷開(kāi)連接
    CBPeripheralStateDisconnected = 0,
//正在連接
    CBPeripheralStateConnecting,
//已經(jīng)連接
    CBPeripheralStateConnected,
//正在斷開(kāi)連接
    CBPeripheralStateDisconnecting NS_AVAILABLE(NA, 9_0),
} NS_AVAILABLE(NA, 7_0);
*/
@property(readonly) CBPeripheralState state;
//包含的服務(wù)
@property(retain, readonly, nullable) NSArray<CBService *> *services;
//繼承于父類CBPeer的identifier的標(biāo)識(shí)符屬性  
@property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(NA, 7_0); 

情形一:(藍(lán)牙外設(shè)的名字不一樣,那么藍(lán)牙外設(shè)的名字就可以作為我們需要的唯一標(biāo)識(shí))當(dāng)我們使用中心設(shè)備進(jìn)行掃描的時(shí)候,即在

[objc] view plain copy

  • (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI;

方法中,我們就可以通過(guò)掃描到的藍(lán)牙外設(shè)的名字(peripheral.name)來(lái)進(jìn)行針對(duì)性的操作。

情形二:(藍(lán)牙外設(shè)的名字都一樣,但是不需要很嚴(yán)苛的知道連接的是那一臺(tái)外部設(shè)備)
有一些公司的外部設(shè)備的名字都是一樣的,但是進(jìn)行連接或者其他操作的時(shí)候,沒(méi)必要知道具體的是哪一臺(tái)設(shè)備,那么就可以使用藍(lán)牙外設(shè)的UUIDString(即peripheral.identifier.UUIDString)來(lái)作為唯一標(biāo)識(shí)。但是,需要注意的一點(diǎn):不同的中心設(shè)備(也可以說(shuō)是不同的手機(jī))對(duì)于同一臺(tái)藍(lán)牙設(shè)備,獲取到的UUIDString是不一樣的。
舉例說(shuō)明一下:對(duì)于同一臺(tái)藍(lán)牙設(shè)備,我的手機(jī)進(jìn)行掃描,然后讀取它的UUIDString,和你的手機(jī)進(jìn)行掃描,獲取到的UUIDString是不同的。

情形三:(藍(lán)牙外設(shè)的名字都一樣的情況下,不管任何手機(jī)獲取到的唯一標(biāo)識(shí)都是一樣的或者需要確切知道是哪一臺(tái)藍(lán)牙設(shè)備)
針對(duì)這種情況,我們只能獲取藍(lán)牙設(shè)備的mac地址來(lái)作為唯一標(biāo)識(shí)。但是,蘋果公司也許是出于安全考慮,并沒(méi)有對(duì)我們開(kāi)放獲取藍(lán)牙設(shè)備的mac地址的接口(安卓開(kāi)發(fā)是可以獲取的)。那么我們只能自己通過(guò)某種手段來(lái)獲取mac地址,有兩種方法可以讓我們獲取到mac地址:
第一種:將mac地址放在藍(lán)牙設(shè)備的廣播數(shù)據(jù)之中,然后在廣播的時(shí)候,將mac地址以廣播的形式發(fā)送出來(lái)以供我們獲取。
第二種:將mac地址寫在某一個(gè)特征通道中,當(dāng)我們連接藍(lán)牙設(shè)備之后,通過(guò)某一個(gè)特征通道來(lái)獲取mac地址。

一些坑爹坑爹情況
一些坑爹的情況
1.為什么掃描不到外設(shè)?->情況1:設(shè)備不支持babybluetooth支持BLE4.0藍(lán)牙設(shè)備,如果是2.0的設(shè)備,那肯定掃描不到模擬器不支持藍(lán)牙調(diào)試,必須使用真機(jī)調(diào)試ios操作系統(tǒng)至少要在6.0以上
->情況2:外設(shè)沒(méi)有開(kāi)啟廣播默認(rèn)情況下打開(kāi)手機(jī)或者ipad的藍(lán)牙,在使用babybluetooth是掃描不到設(shè)備的,因?yàn)槭謾C(jī)和ipad只是打開(kāi)了藍(lán)牙設(shè)備的電源而已,并沒(méi)有發(fā)送廣播,如果想掃描到設(shè)備,需要編程的方式,通過(guò)iphone或ipad,mac發(fā)送藍(lán)牙廣播。demo程序中有一個(gè)iphone和一個(gè)mac發(fā)送藍(lán)牙廣播的程序。已連接的設(shè)備會(huì)停止廣播,所以也搜索不到
->情況3:為什么系統(tǒng)的藍(lán)牙能找到設(shè)備,但是使用babybluetooth的demo卻無(wú)法找到?這種情況一般是因?yàn)槟莻€(gè)藍(lán)牙設(shè)備是支持MFI的,并不是普通的ble設(shè)備。關(guān)于MFI這里補(bǔ)充一下 :MFI ( make for ipad ,iphone, itouch ), 專們?yōu)樘O果設(shè)備制作的設(shè)備, 開(kāi)發(fā)使用的是 ExternalAccessory 框架所以這篇文章不予談?wù)?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在寫這個(gè)博客之前,空余時(shí)間抽看了近一個(gè)月的文檔和Demo,系統(tǒng)給的解釋很詳細(xì),接口也比較實(shí)用,唯獨(dú)有一點(diǎn),對(duì)于設(shè)備...
    木易林1閱讀 3,551評(píng)論 3 4
  • 這里我們具體說(shuō)明一下中心模式的應(yīng)用場(chǎng)景。主設(shè)備(手機(jī)去掃描連接外設(shè),發(fā)現(xiàn)外設(shè)服務(wù)和屬性,操作服務(wù)和屬性的應(yīng)用。一般...
    丶逝水流年閱讀 2,400評(píng)論 3 4
  • 本文主要以藍(lán)牙4.0做介紹,因?yàn)楝F(xiàn)在iOS能用的藍(lán)牙也就是只僅僅4.0的設(shè)備 用的庫(kù)就是core bluetoot...
    暮雨飛煙閱讀 910評(píng)論 0 2
  • 情形一:(藍(lán)牙外設(shè)的名字不一樣,那么藍(lán)牙外設(shè)的名字就可以作為我們需要的唯一標(biāo)識(shí)) -(void)centralMa...
    說(shuō)不出口的喵閱讀 3,405評(píng)論 1 2
  • 春 梅花開(kāi)了 梅子就快熟了 等桃花開(kāi)了 桃子也就熟了 從沒(méi)見(jiàn)過(guò)大片的櫻花 只聽(tīng)說(shuō) 很美 還只聽(tīng)說(shuō)雪浪的薰衣草...
    少年與鹿z閱讀 794評(píng)論 0 1

友情鏈接更多精彩內(nèi)容