美文网首页
iOS iBeacon基站开发

iOS iBeacon基站开发

作者: ___Lynn | 来源:发表于2017-04-25 16:09 被阅读0次

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

    }

    }


    相关文章

      网友评论

          本文标题:iOS iBeacon基站开发

          本文链接:https://www.haomeiwen.com/subject/weomzttx.html