最近做一個店鋪簽到獲取積分的App,用到了iBeacon,蠻好玩的一個小玩意,簡單來說iBeacon這個小設(shè)備,可以被手機通過藍牙搜索到,并能比較精確的顯示距離,和拿到該iBeacon的uuid,major,minor。其中uuid 是一個區(qū)域內(nèi)的唯一標識符,用它可以區(qū)別一個公司的iBeacon,而用major和minor 來區(qū)別店鋪和具體哪臺設(shè)備。
創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):眉山服務(wù)器托管,成都服務(wù)器租用,眉山服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機托管與主機租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機房,BGP機房,電信機房,移動機房,聯(lián)通機房。
項目源碼地址 感謝作者的分享
同時可以參考蘋果官方源碼,里面有設(shè)計多個uuid同時檢測
蘋果官方提供demo
在ios中ibeacon是基于地理位置的微定位技術(shù)(從這句話中可以得出Introduced in iOS 7, iBeacon is an exciting technology enabling new location awareness possibilities for apps.),雖然借助手機藍牙進行接收Majro、Minor,但是他們在開發(fā)工程中沒有任何關(guān)系。
ibeacon使用蘋果提供CoreLocation庫,然而在BLE在開發(fā)過程中使用CoreBluetooth庫。從上面提供的庫來看就很清楚了,特別是在IOS8之上的時候如果想使用ibeacon,必須讓用戶點擊是否允許“App使用地理位置”。如果在第一次使用ios app掃描ibeacon的時候沒有提示這句話是不可能接收到ibeacon的信號(除非ios 8.0之下)。如果是BLE則的開發(fā)過程中之需要提示用戶打開藍牙,并不要求其他的地理位置任何信息。
第一:在ios中所有的數(shù)據(jù)都是通過API獲取的,也就是說在IOS中不會看到藍牙模塊的裸數(shù)據(jù)(在這里的裸數(shù)據(jù)就代表藍牙模塊發(fā)送的16進制的數(shù)據(jù)),只能拿到蘋果公司提供的極個別的API中的數(shù)據(jù)。
第二:ble、ibeacon各使用各自的API,他們之間沒有任何對應(yīng)關(guān)系。如果想使用ble就不可能獲取到ibeacon的major、minor、uuid等信息,如果使用ibeacon,沒有辦法發(fā)起鏈接請求獲取服務(wù)。
第三:在ios中ibeacon通信數(shù)據(jù)只有
這個六個屬性,其分別含義是“ proximityUUID major、minor表示ibeacon的uuid,major、minor;proximity就是蘋果提供的幾個表示距離的屬性CLProximityUnknown(沒有數(shù)據(jù)),CLProximityImmediate(十厘米以內(nèi)),CLProximityNear(一米以內(nèi)),CLProximityFar(一米以外)”。
“在很多硬件人員的眼中認為,ibeacon和ble沒有區(qū)別啊,我們都是在同一個模塊上面開發(fā)的,只是發(fā)送的數(shù)據(jù)格式不一樣,ibeacon應(yīng)該和ble沒有區(qū)別,ios可以獲取數(shù)據(jù)按照我們給的通信協(xié)議進行解析就可以啊。”這個就犯了我剛才所說的一個錯誤,在ios的開發(fā)過程中ibeacon和ble是兩個不同的東西,所有的數(shù)據(jù)都被蘋果攔截了,只給開發(fā)者特定的api可以調(diào)用。雖然從硬件上面來看沒有任何區(qū)別但是在開發(fā)過程中確實兩個不同的東西。但是有很多的廠商又想讓ble具有ibeacon的類似的功能,比如可以讓app獲取到major、minor這個又怎么辦?讓ios的app獲取ble的MAC地址等等功能(說明一下,ios是不能直接獲取ble的mac地址的)?在這里(只是我個人的意見也是我在工作中得到的一些方法)是我的建議,一般很多ble正在發(fā)送發(fā)現(xiàn)廣播的時候攜帶了“kCBAdvDataServiceData”信息,可以把ibeacon的major、minor放在kCBAdvDataServiceData的數(shù)據(jù)區(qū)域,然后讓app根據(jù)協(xié)議截取響應(yīng)的信息。也可以放到其他的信息中,這要看公司的策略。
如果有一款iOSble的巡檢App(非ibeacon的App)可以用BLE掃描出ibeacon的信息,他的App肯定不是直接掃描ibeacon,這一點可以從兩個方面進行驗證第一:是否使用用戶的地理位置,第二:拿一個其他廠家的標準ibeacon,(ibeacon的uuid一定不要一樣,因為ios在掃描ibeacon的時候一定要指定需要掃描的uuid,換一個uuid
app都不可能掃描到)。通過上面兩點可以很好的判定app是巡檢ble還是ibeacon。
總結(jié)上面所有的觀點,如果想使用ios的app巡檢ble又能巡檢ibeacon,一定要在藍牙模塊的廣播數(shù)據(jù)中做文章。怎么做文章需要各廠商自己權(quán)衡。
iPhone用戶可以在未打開App情況下(App被用戶開啟過,并且授權(quán)使用藍牙以及定位,并且藍牙處于開啟狀態(tài)),收到IBeacon設(shè)備(藍牙外設(shè)設(shè)備)廣播的信息,并短暫的激活該App (約10秒)去執(zhí)行一些方法。
根據(jù)IBeacon設(shè)備的發(fā)射范圍,確定用戶當前的狀態(tài):進入、持續(xù)監(jiān)聽、離開。然后做出不同的響應(yīng)
藍牙掃一掃;區(qū)域推送;活動現(xiàn)場互動(配對,尋寶等);簽到,藍牙鎖(應(yīng)用內(nèi)手動簽到、開鎖或者點亮屏幕即可簽到、開鎖)。
藍牙連接打印機
iBeacon
在ios 中ibeacon是基于地理位置的微定位技術(shù),雖然借助手機藍牙進行接收Majro、Minor,但是在開發(fā)工程中沒有任何關(guān)系。
ios 在ble、ibeacon 開發(fā)過程中與Android 的區(qū)別
在ios 中所有的數(shù)據(jù)都是通過API獲取的,也就是說在IOS中不會看到藍牙模塊的裸數(shù)據(jù),只能拿到蘋果公司提供的極個別的API中的數(shù)據(jù)。
ble、ibeacon各使用各自的API,之間沒有任何對應(yīng)關(guān)系。如果想使用ble就不可能獲取到ibeacon的major、minor、uuid 等信息,如果使用ibeacon,沒有辦法發(fā)起鏈接請求獲取服務(wù)。
在ios中ibeacon通信數(shù)據(jù)只有六個屬性,就是蘋果提供的幾個表示距離的屬性,是一個float類型數(shù)據(jù)。
總結(jié)一下藍牙開發(fā)相關(guān)的知識點和注意事項,做個筆記,也希望你們能少踩坑
(公司部分藍牙項目為混編項目,藍牙相關(guān)處理均采用了Objective-C,故本文????均采用OC,Swift處理相同)
藍牙4.0包含兩個藍牙標準,它是一個是 雙模 的標準,它包含 傳統(tǒng)藍牙部分(也稱經(jīng)典藍牙) 和 低功耗藍牙部分(BLE) , 二者適用于不同的應(yīng)用場景和應(yīng)用條件。他們的特點如下
所以藍牙4.0是集成了傳統(tǒng)藍牙和低功耗藍牙兩個標準的,并不只是低功耗藍牙
藍牙4.0支持兩種部署方式: 雙模式 和 單模式 ,雙模同時支持經(jīng)典藍牙和低功耗藍牙,而單模則只支持其中一種。
二者更多細節(jié)詳見: 傳統(tǒng)藍牙和低功耗藍牙的區(qū)別
iOS中藍牙相關(guān)功能都封裝進了 CoreBluetooth 類中,其中有幾個常見的參數(shù)和概念
具體API參考 CoreBluetooth藍牙開發(fā)
保存到數(shù)組中的設(shè)備可通過 UUID 來進行區(qū)分。從 iOS7之后蘋果不提供外設(shè)的mac地址,外設(shè)的唯一標識換成了由mac封裝加密后的UUID,需要注意的是不同的手機獲取同一個外設(shè)的UUID是不同的,所以在不同手機之間UUID不是唯一的,但在本機上可以作為唯一標識(特殊情況手機刷機后也會改變UUID)。
如何獲取Mac地址
一般使用場景是根據(jù)Mac地址區(qū)分某個外設(shè)
注意點:
寫入數(shù)據(jù)時可能會遇到需要分包發(fā)送的情況,我們可以通過下面的API或許當前特征支持的最大的單條寫入長度
maxLength 一般取決于藍牙模塊內(nèi)部接收 緩沖區(qū) 的大小,很多硬件設(shè)備這個緩沖區(qū)的大小是 20 字節(jié), 這個大小也和特征的寫入權(quán)限有關(guān),像具有寫入權(quán)限 withResponse 類的特征其大小一般為 512 字節(jié),當然這些都是取決于設(shè)備測的設(shè)置;
當我們單次發(fā)送的數(shù)據(jù)字節(jié)長度大于 maxLength 時,我們就需要采用分包的方式來發(fā)送數(shù)據(jù)了,
分包發(fā)送的邏輯類似于下面
這邊延時主要是設(shè)備側(cè)的接收模塊接收數(shù)據(jù)以及處理能力有限
外圍設(shè)備測和中心設(shè)備(大部分情況下是手機)保持藍牙連接的狀態(tài)下,如果長時間不產(chǎn)生交互,藍牙就會斷開,所以為了保持兩者持續(xù)的連接狀態(tài),需要做?;钐幚恚簿褪切枰掷m(xù)的發(fā)送心跳包(watchdog)。相應(yīng)的處理是使用一個定時器定時向設(shè)備側(cè)發(fā)送符合設(shè)備協(xié)議格式的心跳包。
斷開連接很簡單,只需要調(diào)用 [self.centralManager cancelPeripheralConnection:peripheral] 傳入需要斷開連接的設(shè)備對象就行了。斷開連接時會自動調(diào)用 centralManager:didDisconnectPeripheral:error: 代理方法。
按照之前的慣例,當error為nil時表示斷開成功,error不為nil時斷開失敗。這種理解是錯誤的。
當你調(diào)用 cancelPeripheralConnection: 方法(主動斷開)斷開連接時error為nil ; 沒有調(diào)用這個方法(異常斷開)而斷開時error返回的是異常斷開的原因。也可以理解為主動調(diào)用斷開連接方法一定會斷開
接下來就是斷開重連的問題了,對藍牙功能進行封裝時肯定少不了斷開重連。首先斷開時可通過上面的代理方法的error是否為nil判斷是否是異常斷開,一般情況下異常斷開時是需要重連的
原因就是當設(shè)備斷開連接后 peripheral.services 為nil了,當然 service.characteristics 也是nil,所以需要在斷開連接時把保存這個設(shè)備對應(yīng)的服務(wù)和特征全部清除,然后在連接成功時重新過一遍發(fā)現(xiàn)服務(wù)和發(fā)現(xiàn)特征的流程就好了。
iOS7 開始,Apple加入了Beacon圍欄檢測的API, ( iBeacon-維基百科 ), 其工作方式是,配備有低功耗藍牙(BLE)通信功能的設(shè)備使用 BLE 技術(shù)向周圍發(fā)送自己特有的 ID,接收到該 ID 的應(yīng)用軟件會根據(jù)該 ID 采取一些行動。比如,在店鋪里設(shè)置 iBeacon 通信模塊的話,便可讓 iPhone 和 iPad 上運行一資訊告知服務(wù)器,或者由服務(wù)器向顧客發(fā)送折扣券及進店積分, 或者公司的手機打卡,只要手機靠近打卡器一定范圍,手機測就向打開器發(fā)送打卡信息,從而自動打卡。這種場景還有很多。 其中一個最重要的功能就是App的喚醒功能(殺死后也能喚醒)
舉一個我們的例子,我們的產(chǎn)品業(yè)務(wù)場景就是在進入車輛以后,需要使用藍牙連接我們的后裝車載設(shè)備以采集車輛信息和駕駛行為行程等,這里有一個問題就是在App被殺死的情況下如何喚醒App, 因為不可能要求用戶每次都主動去打開App,這樣體驗太差。我們的做法是通過iBeacon,當我們的車輛點火以后,設(shè)備測通電,發(fā)出 iBeacon廣播 ,App實現(xiàn)監(jiān)聽iBeacon相關(guān)功能后就可以喚醒我們App,然后在相應(yīng)的回調(diào)的處理一些事情,比如通過藍牙連接設(shè)備。這里的前提條件是我們的硬件設(shè)備測包含iBeacon模塊,具有iBeacon功能,而且對iBeacon的廣播頻率也有一定的要求,長了可能喚醒的功能會不穩(wěn)定,官方建議的好像是100ms,頻率超高越耗電,但可以讓手機或其它監(jiān)聽設(shè)備越快地發(fā)現(xiàn)iBeacon。標準的BLE廣播距離是100m,這使Beacon在室內(nèi)位置跟蹤場景下的效果更理想。
關(guān)于iBeacon更多的使用及介紹請參考
蘋果核 - iOS端近場圍欄檢測(一) ——iBeacon
iBeacon技術(shù)初探
隨著藍牙低功耗技術(shù)BLE(Bluetooth Low Energy)的發(fā)展,藍牙技術(shù)正在一步步成熟,如今的大部分移動設(shè)備都配備有藍牙4.0,相比之前的藍牙技術(shù)耗電量大大降低。從iOS的發(fā)展史也不難看出蘋果目前對藍牙技術(shù)也是越來越關(guān)注,例如蘋果于2013年9月發(fā)布的iOS7就配備了iBeacon技術(shù),這項技術(shù)完全基于藍牙傳輸。但是眾所周知蘋果的設(shè)備對于權(quán)限要求也是比較高的,因此在iOS中并不能像Android一樣隨意使用藍牙進行文件傳輸(除非你已經(jīng)越獄)。知道什么是藍牙之后,那么在iOS中進行藍牙傳輸應(yīng)用開發(fā)常用的框架有哪幾種呢?
1、GameKit的
iBeacon
在ios 中ibeacon是基于地理位置的微定位技術(shù),雖然借助手機藍牙進行接收Majro、Minor,但是在開發(fā)工程中沒有任何關(guān)系。
ios 在ble、ibeacon 開發(fā)過程中與Android 的區(qū)別
在ios 中所有的數(shù)據(jù)都是通過API獲取的,也就是說在IOS中不會看到藍牙模塊的裸數(shù)據(jù),只能拿到蘋果公司提供的極個別的API中的數(shù)據(jù)。
ble、ibeacon各使用各自的API,之間沒有任何對應(yīng)關(guān)系。如果想使用ble就不可能獲取到ibeacon的major、minor、uuid 等信息,如果使用ibeacon,沒有辦法發(fā)起鏈接請求獲取服務(wù)。
在ios中ibeacon通信數(shù)據(jù)只有六個屬性,就是蘋果提供的幾個表示距離的屬性,是一個float類型數(shù)據(jù)。
分享文章:ios開發(fā)ibeacon,iOs開發(fā)判斷勾股數(shù)
文章鏈接:http://www.rwnh.cn/article14/dsdjdge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、全網(wǎng)營銷推廣、品牌網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站營銷、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)