iBeacon基站可以創建一個信號區域,當進入和離開該區域時,應用就會檢測到并發出通知。iBeacon類似一個熱點,只要進入它的信號區域,就可以獲取它發出的信息,而無需先連接上。
iBeacon是基于藍牙和定位的,如同藍牙廣播一樣發送信息,只有進入信號區域才能收到,所以iBeacon并沒放在CoreBluetooth中,而是在位置相關的CoreLocation里。但是使用時要開啟藍牙
1.首先要在工程里的info.plist增加字段NSLocationAlwaysUsageDescription(這個是允許一直在后臺運行的)
2 .h文件
#import<UIKit/UIKit.h>#import<CoreLocation/CoreLocation.h>@interface ViewController : UIViewController<CLLocationManagerDelegate,>@PRoperty (strong, nonatomic) CLBeaconRegion *beacon1;//被掃描的iBeacon@property (strong, nonatomic) CLLocationManager * locationmanager;@end,,,3 .m文件
#define BEACONUUID @"12334566-7173-4889-9579-954995439125"http://iBeacon的uuid可以換成自己設備的uuid- (void)viewDidLoad {[super viewDidLoad];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);......}}uuid唯一標識此類iBeacon。
proximity遠近范圍的,有Near(在幾米內),Immediate(在幾厘米內),Far(超過 10 米以外,不過在測試中超不過10米就是far),Unknown(無效)
major和minor組合后區分同一類型下的iBeacon。
accuracy和iBeacon的距離
rssi信號輕度為負值,越接近0信號越強,等于0時無法獲取信號強度
關于iBeacon的10個真相
如何接收iBeacon信號并讀取其信息
新聞熱點
疑難解答