初識iBeacons,一見鐘情。

2021-07-03 02:52:16 字數 3510 閱讀 9425

ibeacons是蘋果在2023年wwdc上推出一項基於藍芽4.0(bluetooth le | ble | bluetooth smart)的精準微定位技術,當你的手持裝置靠近乙個beacon基站時,裝置就能夠感應到beacon訊號,範圍可以從幾公釐到50公尺。ibeacons相比較於原來的藍芽技術有幾個特點:

在ios7中,passbook的功能所有增強,當然也少不了對ibeacons的支援,你只需要在pass.json檔案中加入beacons字段,然後填寫上與該pass相關的beacon基站資訊,包括proximityuuidmajorminor以及當該pass接收到該beacon訊號時需要顯示的文字relevanttext。這樣,當你把這個包含beacons資訊的pass加入到passbook,並靠近beacons中的某個基站時,該pass的資訊就會自動出現在手機的鎖屏介面上,並顯示relevanttext中的文字。當然得有乙個前提:手機開啟藍芽。

"beacons":[

],

locations字段一樣,乙個pass檔案中最多支援10個beacon基站資訊。其實這樣做也是出於省電考慮,因為系統在每次接收到beacon訊號時,都會在passbook庫中輪詢每乙個pass的beacons資訊,匹配後才將它顯示出來,所以如果不做數量限制,耗電量可能就難以接受,locations原理也類似。

因為是一種定位技術,蘋果將ibeacons相關的介面放到了 corelocation.framework 。在ios7之前,我們可以通過clregion定義乙個地理區域,來跟蹤裝置在該區域內的運動情況,ios7之後,clregion被完全變成了乙個抽象類,子類clcircularregionclbeaconregion分別承擔實現乙個地理區域和beacon訊號區域的功能。

即ios7之後的clregion主要有兩個屬性:

@inte***ce clregion : nsobject @property (nonatomic, assign) bool notifyonentry;

@property (nonatomic, assign) bool notifyonexit;

@end

notifyonentrynotifyonexit分別標記是否在進入和退出該區域時呼叫對用**方法。clbeaconregion另外增加了乙個屬性notifyentrystateondisplay標記是否在使用者手機螢幕點亮時呼叫**方法。

乙個beacon基站主要有三個屬性,即上面說到過的:proximityuuidmajorminor,對應到corelocation中的clbeacon類:

@inte***ce clbeacon : nsobject //...

@property (readonly, nonatomic) nsuuid *proximityuuid;

@property (readonly, nonatomic) nsnumber *major;

@property (readonly, nonatomic) nsnumber *minor;

//...

@end

建立乙個 clbeaconregion ,我們需要先建立乙個目標監控區域唯一的uuid:

nsuuid *myuuid = [[nsuuid alloc] initwithuuidstring:@"e2c56db5-dffb-48d2-b060-d0f5a71096e0"];

clbeaconregion *targetbeaconregion = [[clbeaconregion alloc] initwithproximityuuid:myuuid identifier:@"techday 2013 beijing"];

建立完regoin後,我們需要對該region進行監控以獲取是否進入該區域及一些距離等資訊,我們需要建立乙個cllocationmanager例項然後呼叫startmonitoringforregion:方法來監控上面的beaconregion:

self.locationmanager = [[cllocationmanager alloc] init];

self.locationmanager.delegate = self;

[self.locationmanager startmonitoringforregion:targetbeaconregion];

剩下的就是通過cllocationmanagerdelegate中的各個方法來獲取監控區域內的所有clbeacon基站,進入或退出某個beacon區域,計算舉例某個clbeacon的距離等。

前面我們說到所有支援藍芽4.0的idevice都能夠作為beacon基站發射訊號,這就需要 corebluetooth.framework 的支援。 我們需要建立乙個cbperipheralmanager例項,然後發射beacon廣播訊號:

//為beacon基站建立乙個唯一標示

nsuuid *myuuid = [[nsuuid alloc] initwithuuidstring:@"a4e86dc5-a0e2-g7w0-b060-a0f5a71096c0"];

clbeaconregion *mybeaconregion = [[clbeaconregion alloc] initwithproximityuuid:myuuid identifier:@"ibeacons"];

//獲取該beacon區域的訊號資訊

nsdictionary *peripheraldata = [mybeaconregion peripheraldatawithmeasuredpower:nil];

//建立並廣播beacon訊號

cbperipheralmanager *peripheralmanager = [[cbperipheralmanager alloc] initwithdelegate:self queue:dispatch_get_main_queue()];

[peripheralmanager startadvertising:peripheraldata];

當然你還需要在cbperipheralmanagerdelegate**方法:peripheralmanagerdidupdatestate:根據不同的狀態做一些處理。

蘋果的偉大之處就是在於將複雜的技術以簡單的形式呈現出來,相信看完本文你已經對ibeacons開發相關的技術有了很好的了解,然而ibeacons技術本身的應用才是真正體現價值的地方,相信它能給很多行業帶來變革。

C 單例模式之一見鐘情

單例模式就是保證乙個類有且只有乙個例項物件的一種機制並且提供乙個訪問他的全域性方法 相信每個人都渴望純潔的愛情,希望找到哪個唯一的他 她 不管你是單身,還是已經成雙成對,肯定都希望你的伴侶時唯一的!程式如人生,有些類我們也只希望它只有乙個例項。include using namespace std ...

計算機為何對補碼一見鐘情

雖說早就接受到 原碼 補碼 反碼 這些詞,但始終不能確切體會到它們的真實用處。這種感覺讓人不爽,所以乾脆查查資料,先給自己找個不錯的原因做為思想的動力。1.首先說說計算機為什麼用二進位制編碼形式?相信大家大致都清楚。這是德國數學家萊布尼茨提出的。由於正好二進位制裡的0和1,正好和計算機內部用高低電平...

讓面試官對你「一見鐘情」

都說管理是一門藝術而非技術,其實,道 和 術 在管理中總是相輔相成的,人才管理也不外乎此。利用 需求風格特徵 有針對性地做好員工的管理與激勵,是術的一種,更是道的體現。每年的這個時候,有很多同學已經走上工作的崗位,對於剛開始找工作的同學來說面試是個坎兒。其實這些問題無非歸類為兩種,一種是技能類的問題...