iOS iBeacon基站開發(fā)

iBeacon在iOS 7之后的版本中有內(nèi)置庫,直接引入就可以使用

#import<CoreLocation/CoreLocation.h>//自身作為基站

#import<CoreBluetooth/CoreBluetooth.h>//作為連接基站的設(shè)備

首先對幾個重要參數(shù)作一下說明:

uuid 唯一標識,唯一標識此類iBeacon

major 主要值

minor 次要值

主要值與次要值能夠使你區(qū)分使用相同UUID的不同iBeacon設(shè)備。(在將手機模擬為iBeacon廣播時,可將一些信息作為major或者minor廣播)注意major與minor為16 位無符號整數(shù)。

proximity 遠近范圍,包含三種情況:

CLProximityFar 10米以外

CLProximityImmediate 幾米范圍之內(nèi)

CLProximityNear 幾厘米范圍內(nèi)

rssi 信號強度,為負值,越接近0表示信號強度越大,距離越近

一.自身作為基站

需要遵循協(xié)議? CBPeripheralManagerDelegate

聲明管理者屬性

@property (strong, nonatomic) CBPeripheralManager *peripheraManager;

初始化,queue為nil時會在主線程使用

_peripheraManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];

接下來是兩個主要代理。更新狀態(tài) ,只有狀態(tài)可用的時候才能夠進行創(chuàng)建服務,發(fā)布等等操作

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral{

if (peripheral.state == CBPeripheralManagerStatePoweredOn) {

NSDictionary *peripheralData = nil;

CLBeaconRegion * region = [[CLBeaconRegion alloc] initWithProximityUUID:UUID major:0 minor:1 identifier:[UUID UUIDString]];

peripheralData = [region peripheralDataWithMeasuredPower:nil];

if(peripheralData)

{

[self.peripheraManager startAdvertising:peripheralData];//開始廣播

}

}

}

開始向外廣播數(shù)據(jù)? 當startAdvertising被執(zhí)行的時候調(diào)用這個代理方法,可以接收到一些錯誤信息

- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error{

NSLog(@"Failed advertising: %@", error);

}

二.作為設(shè)備連接基站

需要遵循協(xié)議? CLLocationManagerDelegate

聲明一個屬性

@property (strong, nonatomic) CLLocationManager * locationManager;

@property (strong, nonatomic) CLBeaconRegion *beaconRegion;

初始化

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

self.locationmanager.delegate = self;

self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID

alloc] initWithUUIDString:UUID]];//初始化監(jiān)測的iBeacon信息

[self.locationManager requestAlwaysAuthorization];//設(shè)置location是一直允許

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];

代理

錯誤處理

- (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);

}

//發(fā)現(xiàn)有iBeacon進入監(jiān)測范圍

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

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];//開始RegionBeacons

}

在 iBeacon 到達范圍內(nèi)、離開范圍或某個 iBeacon 的范圍改變時被調(diào)用。

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

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

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

[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);

}

}




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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