iOS藍牙 + Protobuf 相關開發(fā)經驗總結

隨便寫一些開發(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é)作場景。

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

友情鏈接更多精彩內容