隨便寫一些開發(fā)中遇到的問題和解決方法。
藍牙相關
掃描相關
- 蘋果是支持重復掃描同一個藍牙設備的,但是默認會給你去重,所以你在藍牙的代理中獲取到的都是去重以后的。
如果你想要重復掃描一個藍牙設備(比如頻繁獲取他的RSSI強度信號)你可以在掃描開始時加入如下的 opetions。壞處就是如果你周圍有海量的藍牙設備,會比較混亂。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[_centerManager scanForPeripheralsWithServices:nil options:options];
蘋果的藍牙掃描不會給開發(fā)者提供藍牙的mac信息,被包裝成了一個經過蘋果加密后的UUID,所以如果需要使用到mac的話,需要通過其他手段獲取藍牙設備的mac,比如讓硬件工程師配合。
蘋果的藍牙相對于大部分安卓手機來說,連接質量都穩(wěn)定得多(畢竟手機也貴)。
蘋果不會和藍牙設備協(xié)商數(shù)據(jù)包大?。∕TU),或者有一個很高的上限,所以基本靠開發(fā)者控制(此條存疑,我嘗試過一包200個字節(jié)傳輸,都沒有問題,給人的感覺是支持的上限很高,但我沒有探索過這個上限的極限在哪,也可能上限在硬件設備那邊。我們是低功耗藍牙)。
兩個頁面單獨創(chuàng)建的 CBCentralManager 對象不可以共用一個藍牙對象,比如在上個頁面通過一個 CBCentralManager 對象掃描到的藍牙設備,到下一個 Controller 再新建一個CBCentralManager,并把上個頁面的藍牙對象傳輸過來,新的CBCentralManager不可以連接這個藍牙對象。所以要 CBCentralManager 和藍牙對象一起傳輸。
回調
- 蘋果提供的藍牙相關的代理方法基本都要用到,不要偷懶,開發(fā)的時候最好全都處理掉。
Protobuf
- Protobuf 的一般還需要一個解析模塊,建議單獨處理,做好和藍牙模塊的拆分。
- Protobuf 使用有點麻煩,需要在 Build Phases 中給編譯好的 “.pbobjc” 文件添加 “-fno-objc-arc”標識,使用ARC的方式處理(只針對 Objective-C,Swift 還沒試過。Swift是真的好用得多,尤其是枚舉)。
- 其他的可以去看谷歌的文檔,介紹的很詳細。
其他建議
- CBCentralManager 掃描到的藍牙對象最好再做一層包裝,方便給藍牙設備添加其他標志狀態(tài),或者記錄連接情況。
總結
Protobuf的特性對藍牙這種小數(shù)據(jù)量傳輸?shù)膱鼍坝泻芎玫谋憷?,而且?shù)據(jù)安全性很高,數(shù)據(jù)包也小得多,是一個很好的技術協(xié)作場景。