iBeacon詳細(xì)介紹以及坑點(diǎn)


iBeacon 介紹

iBeacon 是蘋果公司在 iOS7上配備的新功能,可以讓附近的手持電子設(shè)備檢測(cè)到一個(gè)由一個(gè) iBeacon 信號(hào)發(fā)射器發(fā)出的藍(lán)牙信號(hào).
它采用了基于藍(lán)牙4.0的低功耗藍(lán)牙技術(shù)(Bluetooth Low Energy, BLE),主要是用作輔助室內(nèi)定位的功能.

iBeacon 原理

iBeacon中有兩個(gè)角色:
發(fā)射者: 一般都是各種硬件
接收者: 一般都是智能終端(手機(jī))
發(fā)射者通過(guò)BLE 的廣告通信通道,以一定時(shí)間間隔向外廣播數(shù)據(jù)包(一般是每秒兩三次),接收者可以通過(guò)終端提供的功能來(lái)接收,達(dá)到信息的交互.
每個(gè)信號(hào)中至少攜帶了三個(gè)主要信息:UUID, Major, Minor,這三個(gè)信號(hào)組成了一個(gè) iBeacon 的唯一標(biāo)識(shí)符.

Beacon.png

當(dāng) iOS設(shè)備接收到 iBeacon 信號(hào)時(shí),還會(huì)有其他重要信息:
rssi: 信號(hào)強(qiáng)度
proximity: 發(fā)射者到接收者的距離(不是數(shù)值,是個(gè)枚舉: Unknow, Immediate, Near, Far)
accuracy: 水平精度

距離遠(yuǎn)時(shí).png
距離近時(shí).png

BLE 發(fā)射的是2.4GHz 的信號(hào),任何物理阻礙物都會(huì)影響 iBeacon 的信號(hào).


block.png

其實(shí),發(fā)射者也就是硬件向四周不停地廣播信號(hào),而信號(hào)就像是水波一樣像四周擴(kuò)散,越靠近中心點(diǎn)的水波越高也就是 rssi 信號(hào)越強(qiáng),而一旦有東西阻隔,信號(hào)就會(huì)減弱甚至消失,而且一旦超過(guò)一定值,信號(hào)就會(huì)消失,這說(shuō)明 iBeacon 的廣播范圍是有限的.


說(shuō)完發(fā)射者,再來(lái)說(shuō)接收者.
接收者提供了兩種方式來(lái)接收iBeacon信號(hào):

  • Monitoring: 可以用來(lái)在設(shè)備進(jìn)入/退出某個(gè)地理區(qū)域時(shí)獲得通知, 使用這種方法可以在應(yīng)用程序的后臺(tái)運(yùn)行時(shí)檢測(cè)iBeacon臭挽,但是只能同時(shí)檢測(cè)20個(gè)region區(qū)域,并且不能夠推測(cè)設(shè)備與iBeacon的距離.
  • Ranging: iOS 7之后提供的 API, 用于確定設(shè)備的近似距離iBeacon 技術(shù),可以用來(lái)檢測(cè)某區(qū)域內(nèi)的所有iBeacons,并且可以精度估計(jì)發(fā)射者與接收者的距離,這個(gè)使用如下四中接近狀態(tài)來(lái)表示:
proximity.png

相關(guān) API

終于說(shuō)到 API, 這個(gè)是可能踩坑比較多的地方了.

  • 需要打開(kāi) GPS 定位和藍(lán)牙.
  • iBeacon 的 API 是在 CoreLocation, 但iBeacon 必須要打開(kāi)藍(lán)牙,如果需要判斷藍(lán)牙,需要用到 CoreBluetooth 框架.
  • Monitoring和 Ranging 是兩種監(jiān)測(cè)方式,可以一起用,但是需要區(qū)分業(yè)務(wù)需求,兩種一起用會(huì)有小坑.
 self.locationManager = [[CLLocationManager alloc] init];
 self.locationManager.delegate = self; // 遵循代理
 if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
      // 請(qǐng)求用戶授權(quán)定位權(quán)限
     [self.locationManager requestAlwaysAuthorization];
 }

CLBeaconRegion 的創(chuàng)建

CLBeaconRegion *region = [[CLBeaconRegion alloc]initWithProximityUUID:#UUID# identifier: #identifier#];
region.notifyOnExit = YES;
region.notifyOnEntry = YES;
region.notifyEntryStateOnDisplay = YES;

接下來(lái)是兩種方式監(jiān)測(cè) iBeacon 方式:

// Monitoring
// 開(kāi)始檢測(cè)區(qū)域
[self.locationManager startMonitoringForRegion:beaconRegion]; 
// 停止檢測(cè)區(qū)域
[self.locationManager stopMonitoringForRegion:beaconRegion]; 
// delegate 
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
// 設(shè)備進(jìn)入該區(qū)域時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
// 設(shè)備退出該區(qū)域時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
// 有錯(cuò)誤產(chǎn)生時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error
// Ranging
// 開(kāi)始檢測(cè)區(qū)域 
[self.locationManager startRangingBeaconsInRegion:beaconRegion];
// 停止檢測(cè)區(qū)域
[self.locationManager stopRangingBeaconsInRegion:beaconRegion]; 
// delegate
// 檢測(cè)到區(qū)域內(nèi)的iBeacons的回調(diào)函數(shù),包含監(jiān)測(cè)到的所有 iBeacon 的信息
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region 
// 有錯(cuò)誤產(chǎn)生時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error

注意事項(xiàng)(坑點(diǎn))

  • Monitoring和Ranging最好不要一起用,會(huì)莫名其妙出現(xiàn)這樣的 log:
[Client] {"msg":"Fence: onClientEventRegionState, invalid state", "regionState":"0"}

google也搜不到why,在后來(lái)我關(guān)掉Monitoring再也沒(méi)有出現(xiàn)這個(gè) log.

  • iBeacon 這個(gè)功能的 API 是在 CoreLocation 框架, 但是 iBeacon 必須要打開(kāi)藍(lán)牙,不然會(huì)一直失敗, 藍(lán)牙又要用到 CoreBluetooth 來(lái)監(jiān)聽(tīng)狀態(tài).(....)

參考

---如果你有興趣, 請(qǐng)直接去這里:
https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf
https://medium.com/@jerrywang0420/ibeacon-%E6%95%99%E5%AD%B8-swift-3-ios-1d4ea88311be

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憔晒,一起剝皮案震驚了整個(gè)濱河市怠蹂,隨后出現(xiàn)的幾起案子窒升,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔缀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坐求,警方通過(guò)查閱死者的電腦和手機(jī)蚕泽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桥嗤,“玉大人须妻,你說(shuō)我怎么就攤上這事》毫欤” “怎么了荒吏?”我有些...
    開(kāi)封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渊鞋。 經(jīng)常有香客問(wèn)我绰更,道長(zhǎng)瞧挤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任儡湾,我火速辦了婚禮特恬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徐钠。我一直安慰自己癌刽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布尝丐。 她就那樣靜靜地躺著显拜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爹袁。 梳的紋絲不亂的頭發(fā)上远荠,一...
    開(kāi)封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音失息,去河邊找鬼譬淳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛根时,可吹牛的內(nèi)容都是我干的瘦赫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛤迎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼确虱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起替裆,我...
    開(kāi)封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤校辩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辆童,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宜咒,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年把鉴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了故黑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庭砍,死狀恐怖场晶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怠缸,我是刑警寧澤诗轻,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站揭北,受9級(jí)特大地震影響扳炬,放射性物質(zhì)發(fā)生泄漏吏颖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一恨樟、第九天 我趴在偏房一處隱蔽的房頂上張望半醉。 院中可真熱鬧,春花似錦劝术、人聲如沸奉呛。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至登馒,卻和暖如春匙握,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陈轿。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工圈纺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麦射。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓蛾娶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親潜秋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛔琅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. iBeacon是什么? 維基百科:iBeacon是蘋果公司提出的"一種可以讓附近手持電子設(shè)備檢測(cè)到的一種新的...
    丨n水瓶座菜蟲灬閱讀 4,374評(píng)論 5 9
  • @end 與之前一樣,你需要初始化位置管理器并設(shè)置它們的 delegate 峻呛。 在 application:did...
    LiWeiJ閱讀 2,132評(píng)論 0 0
  • 今晚看了舒淇主演的電影“我最好朋友的婚禮”從頭到尾罗售,我都能深刻的感受到顧佳的心理體會(huì),那種深深地愛(ài)著那個(gè)人钩述,但是那...
    雪梨菇?jīng)?/span>閱讀 193評(píng)論 1 2
  • 程序國(guó)際化 準(zhǔn)備工作: 首先我們要先創(chuàng)建一個(gè)工程寨躁,我們給他命名Internationalization-Demo,...
    andyJi閱讀 271評(píng)論 0 1
  • 文竹,又名云片松方面,清新典雅放钦,極具文人氣息。 記得第一次看到文竹葡幸,就被它吸引最筒,它形態(tài)優(yōu)雅,翠綠可人蔚叨,像是微型的小松樹(shù)...
    掌心的花語(yǔ)閱讀 415評(píng)論 0 0