iOS-蓝牙4.0开发(踩过的坑)
前言
來公司整整一年了,做得項目全部涉及藍牙。坑應該給我踩得差不多了吧,但是一直沒有做記錄,今天就好好地回顧下項目,總結一下踩過的坑,希望對大家有所幫助。PS:本文重點不在于CoreBluetooth框架的使用,而是實現業務需求時需要注意的事項。
另:推薦LightBlue App,基于CoreBluetooth。是BLE開發的調試利器,該App上能獲取的數據,你就能用代碼實現。藍牙設備通訊協議上寫明有的數據,但是獲取不了,那就是硬件那邊的問題了。
LightBlue
坑0、藍牙版本
- 藍牙4.0:也叫BLE(Bluetooth low energy),特點是功耗低,傳輸速率也較低。但絕對可以滿足市場上的大部分智能穿戴產品了,是目前iOS藍牙開發的主流。從iPhone4s開始支持。使用CoreBluetooth進行開發
- 藍牙3.0:硬件需要獲得MFi認證才能配合iOS設備使用,使用ExternalAccessory框架進行開發。 因為硬件有要求,一般的藍牙外設都不會選擇3.0,除了涉及高質量音頻傳輸的,比如耳機。
初到公司時,硬件已經做好了。藍牙模塊是3.0和4.0雙模的,由于他們不知道MFi認證這回事,所以用的是3.0串口協議。 我初次接觸藍牙開發,加上Android端是能用的,折騰了許久才發現是硬件的問題。最后放棄了當前的方案,考慮過用WiFi,因為功耗和連了設備用戶就不能用WiFi上網的原因,最終還是選擇了BLE。
坑1、搜索設備時用的Service UUID
[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:@"FFA0"] options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@YES}];以上函數,傳nil代表搜索周圍的全部設備;傳UUID代表搜索包含該服務的特定設備。
有些朋友可能會遇到這種的情況:傳nil可以搜到,傳UUID卻搜不到,而且是明確知道該設備包含了該服務的。
造成這個問題的原因是:硬件沒有將該Service添加到廣播包時,即廣播時沒有將該UUID廣播出來,所以iOS設備在搜索時候就會找不到對應的設備。解決辦法:與硬件工程師溝通,讓他在廣播包里加上。
這個本來這也不是什么大問題,因為我們仍然可以通過設備名字去找到自己想連的設備。 但是在某些特定需求下,這個UUID是一定要廣播出來的,這個情況在后面會有提到。
坑2、獲取Mac地址
需求:
0、 初次使用App時需要掃描設備,并顯示出每臺設備的mac地址,點擊設備進行綁定。
1、下次使用時則直接連接綁定的設備。
問題:
- 對于需求0,Android端能做到,iOS卻不行..因為Apple在這里做了限制,無法在掃描階段直接獲得設備的mac地址,必須連接上設備獲取服務和特征的值才能得到mac地址。
- 同樣需求1,Android端也能做到,iOS還是不行(很郁悶).. 原理同上。
解決辦法:
1、最簡單的做法就是讓硬件工程師在廣播包中添加mac地址,這樣就能輕松實現以上兩個需求。
2、很不幸,我用得是第二種方法,代碼寫起來非常難受。具體邏輯是:
因為測試設備只有一臺,不能模擬多臺設備的情況。調試起來也有難度。還遇到了其他的困難具體不表了。以上是實現需求0的思路,需求1的思路也差不多。
坑3、后臺藍牙+重連
實現后臺藍牙數據傳輸很簡單,筆者所用的Xcode8.3,鼠標點幾下即可。
開啟后臺藍牙模式
到此,在后臺中藍牙的基本操作都正常,其中需要做重連業務的要注意一點:
- 斷開后,我們一般是再次掃描周圍設備再完成重連。而后臺掃描設備跟前臺掃描周圍設備有一點不同:
也許是考慮到功耗的原因,在后臺只能搜索特定的設備,所以必須要傳Service UUID。不傳的話一臺設備都搜不到。而這時就需要外設在廣播包中有Service UUID,沒有的話是搜不到的.. 我當時折騰了一天才知道這個,并不是代碼的原因,最后讓硬件工程師在廣播包加上就OK了。
其他
其他的坑是關于藍牙傳輸音頻的,無非是藍牙傳輸速率的限制和實時流的播放,好像跟本文關系不太大,只簡單說下藍牙傳輸速率,iOS藍牙傳輸理論最大可達2667Bytes/s,這個作為參考就可以知道用BLE做音頻傳輸音質方面是不太好的,但是這個也看業務。關于傳輸速率的具體內容可以看:Maximizing BLE Throughput on iOS and Android,算是很權威的數據了。
實時流的播放也是一個坑,但是是另一個領域的東西,有空再寫吧。
關于我
目前在職iOS開發,業余時間獨立開發App,現有上架作品:Mini記賬
公眾號:沙拉可樂?分享獨立開發的干貨和背后的故事
作者:沙拉可樂
鏈接:https://www.jianshu.com/p/2c085f260d65
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的iOS-蓝牙4.0开发(踩过的坑)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python + Selenium】之
- 下一篇: 单溶水箱串级控制计算机控制,单容水箱液位