出現(xiàn)問題的部分邏輯非常的簡單,我們的藍牙產(chǎn)品在廣播包中會以某個字節(jié)標識自己的類型,掃描到設備以后代理方法中會以字典的形式提供給我們。
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI
{
id data = advertisementData[@"kCBAdvDataManufacturerData"];
}
要解決問題之前必須要聲明一點,在藍牙的標準協(xié)議當中擅这,設備的發(fā)現(xiàn)流程如下。
發(fā)現(xiàn)流程
按照協(xié)議景鼠,第15個字節(jié)就是設備的類型仲翎。但是提供給客戶之后痹扇,發(fā)現(xiàn)在iOS 8上設備類型獲取錯誤,iOS 9及以后版本沒有問題溯香。出現(xiàn)這個情況的原因在于鲫构,iOS 8及以前kCBAdvDataManufacturerData
這個數(shù)據(jù)提供的是scan response (SCAN_RSP),但是iOS 9及以后會把advertising packet (ADV_IND)和scan response (SCAN_RSP)兩部分合并在一起提供給了我們玫坛。所以不同版本的情況下我們獲取kCBAdvDataManufacturerData
會出現(xiàn)不同结笨。