Согласно официальным документам Apple, I RSSI рассматривается как сила сигнала.
Instance Property
rssi
The received signal strength of the beacon, measured in decibels.
Declaration
@property(readonly, nonatomic) NSInteger rssi;
В коде Objective-c необходимо добавить два заголовка
#import <CoreLocation/CoreLocation.h>
#import <CoreBluetooth/CoreBluetooth.h>
и в.m вы должны добавить их делегатов, необходимых:
CBPeripheralManagerDelegate,
CLLocationManagerDelegate
, тогда вы должны создать три объекта
@property(nonatomic, strong)CLBeaconRegion *beacon; //iBeacon device be scaned
@property(nonatomic, strong)CLLocationManager *locationManager;//location manager
@property (strong, nonatomic) CBPeripheralManager *peripheralManager;//periphera manager
locationManager, например, так:
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
[_locationManager requestWhenInUseAuthorization];//set location be allow when use
beacon beнапример:
_beacon = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"FDA50693-A4E2-4FB1-AFCF-C6EB07647825"] identifier:@"media"];
//FDA50693-A4E2-4FB1-AFCF-C6EB07647825 this modified be your need scaned device's UUID
Периферийный менеджер может быть установлен следующим образом:
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
в viewdidload, отрегулируйте службу определения местоположения в порядке, а затем выполните следующее:
BOOL enable = [CLLocationManager locationServicesEnabled];
if (enable) {
if ([CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]])
{
[self.locationManager requestAlwaysAuthorization];
[self.locationManager startMonitoringForRegion:_beacon];
[self.locationManager startRangingBeaconsInRegion:_beacon];
}
}
при обнаружении устройства iBeacon может вызвать этот метод делегата:
//find IBeacon device then scan
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray*)beacons i nRegion:(CLBeaconRegion *)region{
//if not we need found deice then stop scan
if (![[region.proximityUUID UUIDString]
isEqualToString:@"12334566-7173-4889-9579-954995439125"]) {
[_locationManager stopMonitoringForRegion:region];
[_locationManager stopRangingBeaconsInRegion:region];
}
//print all IBeacon information
for (CLBeacon *beacon in beacons) {
NSLog(@"rssi is : %ld", beacon.rssi);// this is signal strength
NSLog(@"beacon.proximity %ld", beacon.proximity);
}
}
this beacon.rssi - уровень сигнала, я надеюсьэто может вам помочь.