iBeacon 開發筆記,ibeacon開發筆記

來源:互聯網
上載者:User

iBeacon 開發筆記,ibeacon開發筆記

iBeacon開發筆記

 

2015.10.19

airlocate

=========

airlocate顯示如何使用這個監控範圍clbeaconregions。

代碼還提供了一個例子,你如何能校準和配置iOS裝置作為信標corebluetooth。

您可以配置一個iOS裝置作為信標如下:

1)獲得兩個iOS裝置配備藍芽LE。一個將是目標裝置,一個將是一個遠程(校準)裝置。

2)負載和啟動這個應用程式在這兩個裝置上。

3)通過選擇配置和開啟啟用的開關,將目標裝置轉為信標。

4)取校準裝置,並將一米距離的目標裝置移動。

5)在校準裝置上通過選擇校準校準過程。

6)從表格視圖中選擇目標裝置。

7)校準過程將開始。你應該在這一過程中,在這個過程中,從一邊到另一邊的校準裝置的波。

8)當校準過程完成後,它會顯示一個校準的RSSI值在螢幕上。

9)在目標裝置上,返回到配置螢幕並輸入該值在測量功率下。

註:校準過程是可選的,但建議將微調範圍為您的環境。

您可以配置一個iOS裝置沒有校準它不指定測量功率信標。

如果未指定測量功率,CoreLocation預設為預定值。

一旦你設定你的目標裝置作為一個燈塔,你可以使用這個應用程式示範燈塔範圍和監測。

要示範範圍,選擇遠程裝置。alrangingviewcontroller範圍一套clbeaconregions。

要示範監控,選擇遠程裝置監控。almonitoringviewcontroller允許您配置一個clbeaconregion監測。

著作權(2013)蘋果公司著作權所有,並保留一切權利。

零.寫在前面

關於測試:建議下載Estimote的app,作為基站,得到它的UUID,majon,minor參數。

關於裝置:iBeacon 使用 Bluetooth LE 技術,所以你必須要有一個內建有低功耗藍芽的 iOS 裝置以便與 iBeacon 協同工作。目前這個列表裡包含如下一些裝置:

  • iPhone 4s 或更新的
  • 第三代 iPad 或更新的
  • iPad mini 或更新的
  • 第五代iPod touch 或更新的
  • 系統版本7.0以上

測試結果:rssi訊號輕度大概到-90,有效距離大概為30m。

用途:藍芽BLE,定位,智能家居等。自己還做了個上班打卡的 app,只有進入有效範圍內才能打卡成功。

UUID、主要、次要標識符

如果你不熟悉 iBeacon,你可能也不熟悉術語 UUID主要值(major value)次要值(minor value)

一個 iBeacon 除了是一個低功耗藍牙裝置之外什麼也不是,它們以特定結構發布資訊。這些特定的東西超出本教程的範圍,但要明白的一件重要事情是 iOS 之所以能夠監控這些 iBeacon 就是基於 UUID主要值次要值

UUDID 是 Universally Unique Identifier(通用唯一識別碼)的縮寫,它實際上是一個隨機字串;B558CBDA-4472-4211-A350-FF1196FFE8C8 就是一個例子。在 iBeacon 的討論範圍裡,一個 UUID 通常用於表示你的頂層標識。作為開發人員如果你產生一個 UUID 並將其分配給你的 iBeacon 裝置,那麼當一個裝置檢測到你的 iBeacon 時,它就知道它是在和哪個 iBeacon 通訊。

主要值與次要值在 UUID 之上提供了稍多的粒度。這些值只是 16 位不帶正負號的整數,能夠標識每個單獨的 iBeacon ,甚至是具有同樣 UUID 的哪些。

舉個例子,如果你有多間百貨公司,那麼你所有的 iBeacon 發射器都可有同一個 UUID ,但每個店都有它自己的主要值,而裡面的每個部門就會有它自己的次要值。你的應用能夠對一個位於你在邁阿密、佛羅里達店的鞋類部們裡的 iBeacon 做出響應。

一.iBeacon的使用

開始監聽你的Ibeacon。

在iOS8裡面蘋果改變了地位的開啟方式(iBeacon的使用是基於藍芽和定位的),首先要在工程裡的info.plist增加欄位NSLocationAlwaysUsageDescription(這個是允許一直在後台啟動並執行)

可能你會有些奇怪 iBeacon 會與 Core Location 相關,畢竟它是藍牙裝置,但考慮到 iBeacon 提供微定位資訊對應 GPS 提供宏定位資訊,也就不奇怪了。在將一個 iOS 裝置當作一個iBeacon 而編程時,你就要利用 Core Bluetooth 架構,而在監控 iBeacon 時,你只需同 Core Location 打交道。

當程式運行起來你會發現,裝置左下角有你的程式 icon 表徵圖

.h檔案

#import<UIKit/UIKit.h>

#import<CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,CLLocationManagerDelegate>

@property (nonatomic, strong) NSArray *beaconArr;//存放掃描到的iBeacon

@property (strong, nonatomic) CLBeaconRegion *beacon1;//被掃描的iBeacon

@property (strong, nonatomic) CLLocationManager * locationmanager;

@end

.m檔案

#define BEACONUUID @"12334566-7173-4889-9579-954995439125"//iBeacon的uuid可以換成自己裝置的uuid

- (void)viewDidLoad {

[super viewDidLoad];

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 320, 568)];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:self.tableView];

self.beaconArr = [[NSArray alloc] init];

self.locationmanager = [[CLLocationManager alloc] init];//初始化

self.locationmanager.delegate = self;

self.beacon1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:BEACONUUID] identifier:@"media"];//初始化監測的iBeacon資訊

[self.locationmanager requestAlwaysAuthorization];//設定location是一直允許

}

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{

if (status == kCLAuthorizationStatusAuthorizedAlways) {

[self.locationmanager startMonitoringForRegion:self.beacon1];//開始MonitoringiBeacon

}

}

{

//發現有iBeacon進入監測範圍

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{

[self.locationmanager startRangingBeaconsInRegion:self.beacon1];//開始RegionBeacons

}

//找的iBeacon後掃描它的資訊

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{

//如果存在不是我們要監測的iBeacon那就停止掃描他

if (![[region.proximityUUID UUIDString] isEqualToString:BEACONUUID]){

[self.locationmanager stopMonitoringForRegion:region];

[self.locationmanager stopRangingBeaconsInRegion:region];

}

//列印所有iBeacon的資訊

for (CLBeacon* beacon in beacons) {

NSLog(@"rssi is :%ld",beacon.rssi);

NSLog(@"beacon.proximity %ld",beacon.proximity);

......

}

self.beaconArr = beacons;

[self.tableView reloadData];

}

 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return self.beaconArr.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *ident = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ident];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ident];

}

CLBeacon *beacon = [self.beaconArr objectAtIndex:indexPath.row];

cell.textLabel.text = [beacon.proximityUUID UUIDString];

NSString *str;

switch (beacon.proximity) {

case CLProximityNear:

str = @"近";

break;

case CLProximityImmediate:

str = @"超近";

break;

case CLProximityFar:

str = @"遠";

break;

case CLProximityUnknown:

str = @"不見了";

break;

default:

break;

}

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %ld %@ %@",str,beacon.rssi,beacon.major,beacon.minor];

return cell;

}

//一些錯誤處理,因為你正在同非常具體的硬體特性打交道,你需要知道任何原因導致的監控和測距失敗

- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {    NSLog(@"Failed monitoring region: %@", error);}- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {    NSLog(@"Location manager failed: %@", error);}
二.ibeacon的參數

uuid唯一標識此類iBeacon。

proximity遠近範圍的,有Near(在幾米內),Immediate(在幾厘米內),Far(超過 10 米以外,不過在測試中超不過10米就是far),Unknown(無效)

major和minor組合後區分同一類型下的iBeacon。

accuracy和iBeacon的距離

rssi訊號輕度為負值,越接近0訊號越強,等於0時無法擷取訊號強度

 

三.通知

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {    if ([region isKindOfClass:[CLBeaconRegion class]]) {        UILocalNotification *notification = [[UILocalNotification alloc] init];        notification.alertBody = @"Are you forgetting something?";        notification.soundName = @"Default";        [[UIApplication sharedApplication] presentLocalNotificationNow:notification];    }}

你的位置管理器將在你離開某個地區時調用上面的方法,這就是這個應用有用的時刻。你不需要在你接近你的電腦包時被告知,只需在你離開它太遠時通知你。

此處你檢查地區是否是一個 CLBeaconRegion ,因為如果你同時也在執行地理定位地區監視的話,它還可能是一個 CLCircularRegion 。然後你就發送一個本地通知,附帶一個訊息“Are you forgetting something?” 。

編譯並運行你的應用;離開某個你的註冊的 iBeacon,然後一旦你離開得足夠遠,你就會看到通知彈出來。

 

參考地址:https://github.com/nixzhu/dev-blog/blob/master/2014-04-23-ios7-ibeacons-tutorial.md

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.