iOS iBeacon基站开发

iBeacon在iOS 7之后的版本中有内置库,直接引入就可以使用

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

#import<CoreBluetooth/CoreBluetooth.h>//作为连接基站的设备

首先对几个重要参数作一下说明:

uuid 唯一标识,唯一标识此类iBeacon

major 主要值

minor 次要值

主要值与次要值能够使你区分使用相同UUID的不同iBeacon设备。(在将手机模拟为iBeacon广播时,可将一些信息作为major或者minor广播)注意major与minor为16 位无符号整数。

proximity 远近范围,包含三种情况:

CLProximityFar 10米以外

CLProximityImmediate 几米范围之内

CLProximityNear 几厘米范围内

rssi 信号强度,为负值,越接近0表示信号强度越大,距离越近

一.自身作为基站

需要遵循协议  CBPeripheralManagerDelegate

声明管理者属性

@property (strong, nonatomic) CBPeripheralManager *peripheraManager;

初始化,queue为nil时会在主线程使用

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

接下来是两个主要代理。更新状态 ,只有状态可用的时候才能够进行创建服务,发布等等操作

- (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];//开始广播

}

}

}

开始向外广播数据  当startAdvertising被执行的时候调用这个代理方法,可以接收到一些错误信息

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

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

}

二.作为设备连接基站

需要遵循协议  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]];//初始化监测的iBeacon信息

[self.locationManager requestAlwaysAuthorization];//设置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);

}

//发现有iBeacon进入监测范围

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

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

}

在 iBeacon 到达范围内、离开范围或某个 iBeacon 的范围改变时被调用。

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

//如果存在不是我们要监测的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);

}

}




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @end 与之前一样,你需要初始化位置管理器并设置它们的 delegate 。 在 application:did...
    LiWeiJ阅读 2,198评论 0 0
  • 2015.10.19 airlocate 本文摘抄加个人总结 ========= airlocate显示如何使用这...
    Puiwah_Wai阅读 5,387评论 2 5
  • iBeacon使用的是BLE技术,具体而言,利用的是BLE中名为“通告帧”(Advertising)的广播帧。通告...
    Courage_SC阅读 2,980评论 2 7
  • 更新下 把我之前写的demo找到了放到git上面了地址 最近时间一直在研究ibeacon所以把自己遇到的一些问题写...
    沙瓦迪卡阅读 21,387评论 53 55
  • 1. iBeacon是什么? 维基百科:iBeacon是苹果公司提出的"一种可以让附近手持电子设备检测到的一种新的...
    丨n水瓶座菜虫灬阅读 4,485评论 5 9