IOS에서 IBeacon을 사용하는 방법
아이비콘이 뭐예요?
iBeacon
는 애플이 2013년 9월 발표한 모바일 기기용 OS(iOS7)에 탑재된 새로운 기능이다.저전력 블루투스(BLE) 통신 기능을 갖춘 장치는 BLE
기술을 사용하여 주위에 고유한 ID를 전송하고 해당 ID를 수신한 응용 프로그램은 해당 ID에 따라 조치를 취합니다.개인적인 측면에서 보면
iBeacon
사방팔방으로 끊임없이 신호를 방송하는데 마치 잔잔한 수면에 돌을 던져 층층이 잔잔한 물결을 일으키는 것 같다. 물결은 아이비콘의 RSSI
(신호 강도 지시를 받음) 중심점에 가까울수록 물결이 높아진다(RSSI가 커진다). 이 물결의 크기(RSSI의 값)는 돌을 던질 때 힘의 크기(발사 전력)와 수질(주변 환경 인자)의 영향을 받는다.중심점에서 멀어질수록 물결은 평온해지고 일정치를 초과하면 물결은 무형으로 사라진다. 즉, 아이비콘이 밖으로 방송하는 거리는 범위가 있고 이 범위를 초과하면 아이비콘의 신호를 받아들일 수 없다.iOS 개발자의 측면에서 볼 때 iBeacon은
CoreLocation
프레임워크에서 CLBeacon
클래스로 추상화되었다. 이 클래스는 6개의 속성이 있는데 각각 다음과 같다.proximityUUID
, NSUUID
로 회사를 표시하는 데 쓰인다.회사, 조직마다 사용하는 iBeacon은 동일proximityUUID
을 가져야 한다.major
, 주요 값은 한 그룹의 관련 비콘을 식별하는 데 사용된다. 예를 들어 체인 슈퍼마켓의 장면에서 각 지점의 비콘은 같은 것을 가져야 한다major
.minor
, 부차적인 값은 특정한 비콘을 구분하는 데 쓰인다.proximity
, 원근 범위의 매거값.
typedef NS_ENUM(NSInteger, CLProximity) {
CLProximityUnknown,//
CLProximityImmediate,//
CLProximityNear,//
CLProximityFar// 10 , 10 far
}
accuracy
, 아이비콘과의 거리.rssi
, 신호의 경도는 마이너스이고 0신호에 가까울수록 강하며 0시 신호를 얻을 수 없는 강도와 같다.proximityUUID
, major
, minor
이 세 가지 속성으로 구성된 유일한 식별자입니다.iBeacon
의 범위에 들어가면 프로그램이 죽은 상황에서도 앱을 깨울 수 있다(약 10초).필요할 때 iBeacon
류의 UIApplication
방법을 사용하여 더 많은 백그라운드 실행 시간을 요청할 수 있습니다.iBeacon의 용도: 우리는
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;
로 실내 포지셔닝(차고, 백화점), 스마트 카드놀이, 알림(어떤 물체를 떠날 때, 예를 들어 집을 떠날 때)을 할 수 있다.iBeacon과 BLE의 차이점
iOS에서 iBeacon은 지리적 위치를 바탕으로 하는 마이크로 포지셔닝 기술로 휴대전화 블루투스를 빌려 수신
iBeacon
,Majro
을 하지만 이들은 개발 공정에서 아무런 관계가 없다.Minor
애플이 제공하는 iBeacon
라이브러리를 사용하지만 BLE는 개발 과정에서 CoreLocation
라이브러리를 사용한다.위에서 제공한 라이브러리를 보면 알 수 있다. 특히 iOS8.0 이후 CoreBluetooth
를 사용하려면 iBeacon
지리적 위치 사용 허용 여부를 클릭해야 한다.iOS App 스캔XXapp
을 처음 사용할 때 알림이 없으면 iBeacon
신호를 받을 수 없습니다. (iOS 8.0 이하가 아니라면)BLE의 경우 개발 과정에서 블루투스를 켜야 하며 다른 지리적 위치에 대한 정보를 요구하지 않습니다.iBeacon의 iOS에서의 활용
권한 요청
iBeacon
에 추가info.plist
, NSLocationAlwaysAndWhenInUseUsageDescription
, NSLocationWhenInUseUsageDescription
, 지리적 위치 권한을 요청합니다.켜기
NSLocationAlwaysUsageDescription
관련 코드
import
Background Modes
.초기화
<CoreLocation/CoreLocation.h>
및locationManager
.
- (CLLocationManager *)locationManager {
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
}
return _locationManager;
}
- (CLBeaconRegion *)beaconRegion {
if (!_beaconRegion) {
_beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:Beacon_Device_UUID] identifier:@"test"];
_beaconRegion.notifyEntryStateOnDisplay = YES;
}
return _beaconRegion;
}
beaconRegion
클래스는 세 가지 초기화 방법을 제공합니다.
// UUID Beacon
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier;
// UUID,major Beacon
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major identifier:(NSString *)identifier;
// Beacon
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;
모니터링을 시작하기 전에 장치가 지원되는지, 지리적 위치에 접근할 수 있는지 판단해야 합니다.
BOOL availableMonitor = [CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]];
if (availableMonitor) {
CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];
switch (authorizationStatus) {
case kCLAuthorizationStatusNotDetermined:
[self.locationManager requestAlwaysAuthorization];
break;
case kCLAuthorizationStatusRestricted:
case kCLAuthorizationStatusDenied:
NSLog(@" ");
break;
case kCLAuthorizationStatusAuthorizedAlways:
case kCLAuthorizationStatusAuthorizedWhenInUse:{
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
}
break;
}
} else {
NSLog(@" CLBeaconRegion ");
}
감청 방식
두 가지 방법으로 영역
CLBeaconRegion
또는 isMonitoringAvailableForClass
측정 가능Monitoring: 장치가 특정한 지리 구역에 들어가거나 종료할 때 알림을 받을 수 있습니다. 이런 방법을 사용하면 프로그램의 백그라운드가 실행될 때 iBeacon을 검출할 수 있지만 20개의region 구역만 동시에 검출할 수 있고 장치와 iBeacon의 거리를 추측할 수 없습니다.
//
[self.locationManager startMonitoringForRegion:beaconRegion];
//
[self.locationManager stopMonitoringForRegion:beaconRegion];
// Monitoring
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region;
//
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;
//
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;
// Monitoring
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error;
Ranging: 특정 영역 내의 모든 iBeacons를 검사하는 데 사용할 수 있습니다.
//
[self.locationManager startRangingBeaconsInRegion:beaconRegion];
//
[self.locationManager stopRangingBeaconsInRegion:beaconRegion];
// Ranging
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region
// Ranging
- (void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error
프로세스kill 후 iBeacon 영역에 들어가는 리셋
// , ibeacon , /
- (void)locationManager:(CLLocationManager *)manager
didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
더 많은 백스테이지 시간을 쟁취하다
필요할 때
Monitoring
류의 Ranging
방법을 사용하여 더 많은 백그라운드 실행 시간을 요청할 수 있습니다.[아이폰으로 아이비콘 시뮬레이션]
Bluetooth 저전력 공유 데이터를 지원하는 iOS 장치는 모두 사용할 수 있습니다
UIApplication
.import
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;
및 iBeacon
<CoreBluetooth/CoreBluetooth.h>
에서 <CoreLocation/CoreLocation.h>
명령을 사용하여 UUIDterminal
를 생성합니다.사실
uuidgen
을 이용하여 비콘 장치의 신호를 시뮬레이션하는 것은 매우 간단하다.관련 코드
초기화
063FA845-F091-4129-937D-2A189A86D844
self.peripheralManager= [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
신호를 보내다
NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:self.UUIDTextField.text];
// beacon
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:self.majorTextField.text.integerValue minor:self.minorTextField.text.integerValue identifier:@"test"];
NSDictionary *beaconPeripheraData = [beaconRegion peripheralDataWithMeasuredPower:nil];
if(beaconPeripheraData) {
[self.peripheralManager startAdvertising:beaconPeripheraData];;//
}
방송을 중지하다
[self.peripheralManager stopAdvertising];
주의점
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS에서 ReplayKit 및 RTC 사용 방법응용된 소리와 아나운서의 소리를 포함한다.이 두 가지 수요를 감안하여 우리는 스크린 공유를 하는 생방송에 필요한 미디어 흐름을 간단하게 분석할 수 있다. 만약 우리가 Audio App과 Audio Mic를 두 개의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.