Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- UIButton
- error
- iOS16
- Firebase
- FLUTTER
- Code
- Apple
- Notification
- Realm
- window
- SwiftUI
- stack
- Git
- darkmode
- mac
- 한글
- IOS
- MacOS
- JPA
- Archive
- Session
- view
- geofencing
- Swift
- appstore
- 개발자
- Xcode
- github
- 웹뷰
- rxswift
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Document ) iBeacon 장치와의 근접성 확인 (iBeacon 장치 감지, 거리 확인, +앱살리기) 본문
iOS, Swift/WWDC, Session, Docu
Document ) iBeacon 장치와의 근접성 확인 (iBeacon 장치 감지, 거리 확인, +앱살리기)
EEYatHo 2024. 11. 15. 15:52반응형
비콘을 감지하고 비콘과의 상대 거리를 확인합니다.
개요
- iBeacon은 귀하의 기기에서 감지할 수 있는 Bluetooth 신호를 방출하는 기기입니다.
- 회사는 사용자에게 이로운 경험을 제공하기 위해, iBeacon 기기를 배치할 수 있으며, 앱은 비콘의 근접성을 사용하여 적절한 조치 과정을 결정할 수 있습니다.
- 근처 비콘의 근접성에 따라 어떤 조치를 취할지 결정합니다.
- 예를 들어, 백화점은 매장의 각 구역을 식별하는 비콘을 배치할 수 있으며, 해당 앱은 사용자가 각 구역 근처에 있을 때 세일 품목을 가리킬 수 있습니다.
- 앱에 iBeacon 지원을 추가하려면 두 가지 다른 단계에서 비콘을 감지해야 합니다.
- 지역 모니터링을 사용하여 iBeacon의 존재를 감지합니다.
- 비콘 거리 측정을 사용하여 감지된 iBeacon과의 근접성을 확인합니다.
- 비콘을 감지하는 2단계 프로세스를 사용하면 전력 소비가 크게 줄어듭니다.
- 범위 측정에는 Bluetooth 신호 강도를 자주 측정하고 관련 비콘까지의 거리를 계산해야 합니다.
- 반면, 지역 모니터링은 근처 비콘에 대한 수동적 청취만 포함하므로 전력 소비가 훨씬 적습니다.
iBeacon 하드웨어 배포
- iBeacon 하드웨어를 배포할 때는 적절한 근접 UUID, 주요 값, 부차 값으로 프로그래밍해야 합니다.
- UUID만 필요할 수 있지만, 세 가지 값을 모두 iBeacon 하드웨어에 프로그래밍하는 것이 좋습니다.
- 여러 iBeacon 을 사용할 경우, 상위 요소는 동일한 하위 집합을 지정하여 관련 비콘 그룹을 찾을 수 있습니다.
비콘 존재감지 - 지역 모니터링
- 지역 모니터링을 사용하여 iBeacon이 근처에 있을 때 앱에 경고합니다.
- 비콘을 모니터링하려면 CLLocationManager객체를 생성하고 startMonitoring(for:)메서드에 등록합니다.
- 비콘 지역에는 감지하려는 비콘의 근접 UUID, major, minor 값이 포함됩니다. 일치하는 값을 가진 비콘만 대리자 객체에 대한 호출을 트리거합니다.
- 아래 코드는 회사 비콘에 대한 지역 모니터링을 설정하는 방법의 예를 보여줍니다.
- 일반적으로 회사의 UUID를 한 번 정의하고 나중에 변경하지 않기 때문에, 이 예에는 해당 값의 하드코딩된 버전이 포함됩니다.
- 이 메서드를 호출하기 전에 CLLocationManager객체를 생성하고 대리자를 할당해야 합니다.
func monitorBeacons() {
if CLLocationManager.isMonitoringAvailable(for:
CLBeaconRegion.self) {
// Match all beacons with the specified UUID
let proximityUUID = UUID(uuidString:
"39ED98FF-2900-441A-802F-9C398FC199D2")
let beaconID = "com.example.myBeaconRegion"
// Create the region and begin monitoring it.
let region = CLBeaconRegion(proximityUUID: proximityUUID!,
identifier: beaconID)
self.locationManager.startMonitoring(for: region)
}
}
- 일치하는 iBeacon이 감지되면 CLLocationManager객체는 locationManager(_:didEnterRegion:)메서드를 호출하여 대리자에게 알립니다.
- 마찬가지로 감지된 비콘이 범위를 벗어나면 위치 관리자가 locationManager(_:didExitRegion:)메서드를 호출합니다.
- delegate 메서드를 사용하여 비콘 범위 지정을 시작 및 중지합니다.
[중요]
- 비콘이 감지될 때 앱이 실행 중이 아니면 시스템은 앱을 시작하려고 시도합니다.
- 앱은 지역 모니터링을 사용할 권한이 있어야 하며, 시작하려면 위치 업데이트 백그라운드 모드로 구성되어야 합니다. 자세한 내용은 위치 서비스 사용 권한 요청을 참조하세요 .
비콘과의 근접성 확인 - 거리 측정
- iBeacon을 감지한 후, 범위 측정을 사용하여 비콘과 사용자 기기 간의 상대적 거리를 확인합니다.
- 범위 측정은 두 기기가 멀리 떨어져 있거나, 가까이 있거나, 바로 근처에 있을 때 보고합니다.
- 정확한 거리를 제공하지 않으며, 비콘 신호의 강도에 의존하여 직접 해당 정보를 계산해서는 안 됩니다.
- 상대적 값을 사용하여 적절한 조치 과정을 결정합니다.
- 예를 들어, 미술관 앱은 사용자가 iBeacon 바로 근처에 있을 때까지 기다렸다가 해당 작품에 대한 정보를 제공할 수 있습니다.
- 거리 측정(ranging)을 시작하기에 가장 논리적인 장소는 비콘이 처음 감지될 때 delegate의locationManager(_:didEnterRegion:)메서드입니다. (거리 측정을 중단할 장소는 locationManager(_:didExitRegion:)메서드입니다.)
- 거리 측정을 시작하려면 지역 모니터링에 사용한 것과 동일한 CLBeaconRegion객체를 location manager의 startRangingBeacons(in:)메서드에 전달합니다.
- 아래 코드는 감지된 비콘에 대한 범위 지정을 켜는 이 대리자 메서드의 구현을 보여줍니다.
- 이 메서드는 또한 앱이 언제든지 범위 지정을 중지하고 다시 시작할 수 있도록 비콘을 내부 배열에 추가합니다.
- 예를 들어, 전원을 절약하기 위해 앱이 백그라운드에 있을 때 범위 지정을 중지할 수 있습니다.
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
if region is CLBeaconRegion {
// Start ranging only if the devices supports this service.
if CLLocationManager.isRangingAvailable() {
manager.startRangingBeacons(in: region as! CLBeaconRegion)
// Store the beacon so that ranging can be stopped on demand.
beaconsToRange.append(region as! CLBeaconRegion)
}
}
}
- 범위가 활성화되어 있는 경우, 위치 관리자 객체는 보고할 변경 사항이 있을 때마다 대리자의 locationManager(_:didRangeBeacons:in:)메서드를 호출합니다.
- 이 메서드를 사용하여 근처 비콘의 근접성에 따라 조치를 취합니다.
- 아래 코드는 박물관 앱이 근접성 값을 사용하여 가장 가까운 전시에 대한 정보를 표시하는 방법을 보여줍니다. 이 예에서 박물관은 주요 값과 부차 값을 사용하여 각 전시를 식별합니다.
func locationManager(_ manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
in region: CLBeaconRegion) {
if beacons.count > 0 {
let nearestBeacon = beacons.first!
let major = CLBeaconMajorValue(nearestBeacon.major)
let minor = CLBeaconMinorValue(nearestBeacon.minor)
switch nearestBeacon.proximity {
case .near, .immediate:
// Display information about the relevant exhibit.
displayInformationAboutExhibit(major: major, minor: minor)
break
default:
// Dismiss exhibit information, if it is displayed.
dismissExhibit(major: major, minor: minor)
break
}
}
}
}
'iOS, Swift > WWDC, Session, Docu' 카테고리의 다른 글
Document ) iOS 기기를 iBeacon 기기로 전환 (0) | 2024.11.26 |
---|---|
WWDC19 ) CoreLocation 새로운 소식 (iOS13) (3) | 2024.11.14 |
WWDC23 ) 간소화된 location updates 알아보기 (1) | 2024.11.14 |
Document ) Core Location Monitor 소개 (1) | 2024.11.01 |
Document ) 지리적 지역 근접성 Monitoring (1) | 2024.11.01 |
Comments