在ios中ibeacon是基于地理位置的微定位技術(shù)(從這句話中可以得出Introduced in iOS 7, iBeacon is an exciting technology enabling new location awareness possibilities for apps.),雖然借助手機(jī)藍(lán)牙進(jìn)行接收Majro、Minor潘飘,但是他們?cè)陂_發(fā)工程中沒有任何關(guān)系输莺。
ibeacon使用蘋果提供CoreLocation庫(kù)属拾,然而在BLE在開發(fā)過(guò)程中使用CoreBluetooth庫(kù)朋凉。從上面提供的庫(kù)來(lái)看就很清楚了改览,特別是在IOS8之上的時(shí)候如果想使用ibeacon,必須讓用戶點(diǎn)擊是否允許“App使用地理位置”顽冶。如果在第一次使用ios app掃描ibeacon的時(shí)候沒有提示這句話是不可能接收到ibeacon的信號(hào)(除非ios 8.0之下)。如果是BLE則的開發(fā)過(guò)程中之需要提示用戶打開藍(lán)牙售碳,并不要求其他的地理位置任何信息强重。
ios在ble绞呈、ibeacon開發(fā)過(guò)程中與Android的區(qū)別
第一:在ios中所有的數(shù)據(jù)都是通過(guò)API獲取的,也就是說(shuō)在IOS中不會(huì)看到藍(lán)牙模塊的裸數(shù)據(jù)(在這里的裸數(shù)據(jù)就代表藍(lán)牙模塊發(fā)送的16進(jìn)制的數(shù)據(jù))间景,只能拿到蘋果公司提供的極個(gè)別的API中的數(shù)據(jù)佃声。
第二:ble、ibeacon各使用各自的API倘要,他們之間沒有任何對(duì)應(yīng)關(guān)系圾亏。如果想使用ble就不可能獲取到ibeacon的major、minor封拧、uuid等信息志鹃,如果使用ibeacon,沒有辦法發(fā)起鏈接請(qǐng)求獲取服務(wù)泽西。
第三:在ios中ibeacon通信數(shù)據(jù)只有
//設(shè)備的唯一ID曹铃,一般是自定義;
@property (readonly, nonatomic, strong) NSUUID*proximityUUID;
//主要區(qū)域標(biāo)識(shí)捧杉,可定義(例如:xxx商場(chǎng)的標(biāo)記)铛只;
@property (readonly, nonatomic, strong) NSNumber *major;
//次要區(qū)域標(biāo)識(shí),可定義(例如:xxx商場(chǎng)的xxx店鋪)糠溜;
@property (readonly, nonatomic,strong) NSNumber *minor;
@property (readonly, nonatomic) CLProximity proximity;
// accuracy表示相對(duì)距離淳玩,是一個(gè)float類型數(shù)據(jù)。
@property (readonly,nonatomic) CLLocationAccuracy accuracy;
// RSSI就是信號(hào)強(qiáng)度非竿。
@property (readonly, nonatomic) NSInteger rssi;
這個(gè)六個(gè)屬性蜕着,其分別含義是“ proximityUUID major、minor表示ibeacon的uuid红柱,major承匣、minor;proximity就是蘋果提供的幾個(gè)表示距離的屬性CLProximityUnknown(沒有數(shù)據(jù)),CLProximityImmediate(十厘米以內(nèi)),CLProximityNear(一米以內(nèi)),CLProximityFar(一米以外)”锤悄。
“在很多硬件人員的眼中認(rèn)為韧骗,ibeacon和ble沒有區(qū)別啊,我們都是在同一個(gè)模塊上面開發(fā)的零聚,只是發(fā)送的數(shù)據(jù)格式不一樣袍暴,ibeacon應(yīng)該和ble沒有區(qū)別,ios可以獲取數(shù)據(jù)按照我們給的通信協(xié)議進(jìn)行解析就可以啊隶症≌#”這個(gè)就犯了我剛才所說(shuō)的一個(gè)錯(cuò)誤,在ios的開發(fā)過(guò)程中ibeacon和ble是兩個(gè)不同的東西蚂会,所有的數(shù)據(jù)都被蘋果攔截了淋样,只給開發(fā)者特定的api可以調(diào)用。雖然從硬件上面來(lái)看沒有任何區(qū)別但是在開發(fā)過(guò)程中確實(shí)兩個(gè)不同的東西胁住。但是有很多的廠商又想讓ble具有ibeacon的類似的功能趁猴,比如可以讓app獲取到major刊咳、minor這個(gè)又怎么辦?讓ios的app獲取ble的MAC地址等等功能(說(shuō)明一下儡司,ios是不能直接獲取ble的mac地址的)芦缰?在這里(只是我個(gè)人的意見也是我在工作中得到的一些方法)是我的建議,一般很多ble正在發(fā)送發(fā)現(xiàn)廣播的時(shí)候攜帶了“kCBAdvDataServiceData”信息枫慷,可以把ibeacon的major让蕾、minor放在kCBAdvDataServiceData的數(shù)據(jù)區(qū)域,然后讓app根據(jù)協(xié)議截取響應(yīng)的信息或听。也可以放到其他的信息中探孝,這要看公司的策略。
如果有一款iOSble的巡檢App(非ibeacon的App)可以用BLE掃描出ibeacon的信息誉裆,他的App肯定不是直接掃描ibeacon顿颅,這一點(diǎn)可以從兩個(gè)方面進(jìn)行驗(yàn)證第一:是否使用用戶的地理位置,第二:拿一個(gè)其他廠家的標(biāo)準(zhǔn)ibeacon足丢,(ibeacon的uuid一定不要一樣粱腻,因?yàn)閕os在掃描ibeacon的時(shí)候一定要指定需要掃描的uuid,換一個(gè)uuid
app都不可能掃描到)斩跌。通過(guò)上面兩點(diǎn)可以很好的判定app是巡檢ble還是ibeacon绍些。
總結(jié)上面所有的觀點(diǎn),如果想使用ios的app巡檢ble又能巡檢ibeacon耀鸦,一定要在藍(lán)牙模塊的廣播數(shù)據(jù)中做文章柬批。怎么做文章需要各廠商自己權(quán)衡。
IBeacon的設(shè)計(jì)邏輯:
iPhone用戶可以在未打開App情況下(App被用戶開啟過(guò)袖订,并且授權(quán)使用藍(lán)牙以及定位氮帐,并且藍(lán)牙處于開啟狀態(tài)),收到IBeacon設(shè)備(藍(lán)牙外設(shè)設(shè)備)廣播的信息洛姑,并短暫的激活該App (約10秒)去執(zhí)行一些方法上沐。
根據(jù)IBeacon設(shè)備的發(fā)射范圍,確定用戶當(dāng)前的狀態(tài):進(jìn)入楞艾、持續(xù)監(jiān)聽参咙、離開。然后做出不同的響應(yīng)
應(yīng)用場(chǎng)景:
藍(lán)牙掃一掃产徊;區(qū)域推送昂勒;活動(dòng)現(xiàn)場(chǎng)互動(dòng)(配對(duì),尋寶等)舟铜;簽到,藍(lán)牙鎖(應(yīng)用內(nèi)手動(dòng)簽到奠衔、開鎖或者點(diǎn)亮屏幕即可簽到谆刨、開鎖)塘娶。
藍(lán)牙連接打印機(jī)
https://www.cnblogs.com/liuxingchen/p/5499610.html
http://liuyanwei.jumppo.com/2015/08/14/ios-BLE-2.html