아이비콘의 용도에 대해서 생각을 해보도록 하겠습니다.
15일째 보도는 @aikosogabe씨가 쓴 것리액트로 저희 학습소 라이프를 도와줄 수 있는 앱을 만들어 봤어요.
이 장르를 선택한 것은 iBeacon에 관한 것을 접할 기회가 있었기 때문에 조사한 내용을 정리하고 싶었는데, 이 장르가 유명하다고 생각했지만 사용할 기회를 만나지 못했기 때문이다.
(발송 기회가 비용이 들기 때문에 대부분 GPS를 사용하여 같은 기능을 판단한다고 생각합니다.)
읽고 나서 좋은 생각이 있으면 댓글로 남겨주세요.
iBeacon이란?
아이비콘을 조사해봤는데 이런 느낌이에요.
https://developer.apple.com/ibeacon/
참고로 iOS 7은 2013년 9월 18일에 발표되었는데, 당시 컨트롤센터, 에어드롭, 카플레이의 기능을 추가하였다.
이 기능이 추가된 건 그 전이죠...
간단히 계획을 세우다
송신측 단말기(커서 단말기)와 수신측 단말기(iOS 응용 등) 준비
발송자의 단말기는 일정 시간 간격으로 ID와 같은 정보를 BLE를 바탕으로 광고한다(정기적으로 발송)
인상은 이렇습니다. 허선을 홍보 메시지로 삼으세요.
수신측의 단말기에서 광고 정보(기본적으로 UUID만 있음)를 받으면 이 정보에 따라 데이터를 얻을 수 있다. 이로써 수신측의 단말기에서 발송된 각 신호 단말기에 따라 서로 다른 표현을 할 수 있다.
여러 개의 커서 터미널을 준비할 때, 주 수치의 작은 값을 설정하면 어느 터미널의 정보를 받는지 구분할 수 있다
iOS 애플리케이션으로 수신
사용 권한
필요한 것은 위치 정보를 얻는 권한이다
애플리케이션만 사용하는 경우
NSLocationWhenInUseUsageDescription
배경NSLocationAlwaysUsageDescription
이라면 허락이 필요합니다.BLE를 사용하려면 블루투스가 아니라 위치 정보의 허가를 받아야 한다고 생각하는 사람이 있을 것 같습니다. 블루투스 자체의 전원이 꺼지면 사용할 수 없습니다.
구역 감시
커서의 발송 구역에 있는지, 구역 내에서 활동하는 발화 등을 측정할 때 사용
// BeaconRegionで受信したいアドバタイズのUUIDを指定しておきます
let beaconRegion = CLBeaconRegion(uuid: UUID(uuidString: ""), identifier: "identifier")
// CLLocationManagerDelegate経由で先述のパーミッションの変更を受け取ります
// アプリ使用中のみ許可を選択されたときに受信したい場合このようにして領域監視を開始します
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
if manager.authorizationStatus == .authorizedWhenInUse {
manager.startMonitoring(for: beaconRegion)
} else {
manager.stopMonitoring(for: beaconRegion)
}
}
// 領域監視が開始されたらこの関数内で領域内であるかの判定を行いハンドリングさせます
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {
// どのビーコンであるのかUUIDやMajor値Minor値はCLBeaconRegionから取得できます
guard let beaconRegion = region as? CLBeaconRegion else { return }
switch state {
case .inside: // 領域内
case .outside: // 領域外
case .unknown: // 不明
}
}
거리 측정신호와 거리를 측정할 때도 거리를 측정할 수 있는데, 측정할 수 있는 거리는 이 네 가지 유형이다
멀다 가깝다 가깝다
// 先ほどの領域監視を行う関数内で領域内の時だけレンジングを開始する場合は下記のように記載します
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {
guard let beaconRegion = region as? CLBeaconRegion else { return }
if case .inside = state {
manager.startRangingBeacons(satisfying: beaconRegion.beaconIdentityConstraint)
} else {
manager.stopRangingBeacons(satisfying: beaconRegion.beaconIdentityConstraint)
}
}
// レンジングさせた結果によってハンドリングさせる場合は下記のように記載します
func locationManager(_ manager: CLLocationManager, didRange beacons: [CLBeacon], satisfying beaconConstraint: CLBeaconIdentityConstraint) {
// UUIDやMajor値Minor値はCLBeaconから取得できます
switch beacon.first!.proximity {
case .far:
case .immediate:
case .near:
case .unknown:
@unknown default: return
}
}
방법을 생각하다상술한 생각을 실천해 보면
잘못된 처리는 어려울 것 같은데 그냥 받아들이면 생각보다 쉬울 것 같아요.
다만, 최근 엄격해진 위치 정보를 얻을 수 있는 권한을 얻기는 어렵다...
할 수 있는 걸 알았기 때문에 필사적으로 세 가지 사용법을 생각해봤는데, 좋은 생각이 있으면 댓글로 남겨주세요(스트레스)
미술관과 박물관의 음성 지도
거리를 측정할 수 있기 때문에 소개하고 싶은 미술품에 가까울 때 소개를 시작하는 게 좋을 것 같아요.
좁은 범위에서 조작하려면 GPS로만 판단하는 것보다 커서가 더 적합하다. 커서라면 간단하게 위치를 이동할 수 있다는 점도 장점이다.
미로 방지
아이들이 공원이나 캠핑장에서 자유롭게 놀고 싶을 때.
아이가 송신기를 들고 영역 내에 있는지 아닌지를 판단할 수 있기 때문에 먼 곳으로 갔다면 앱 측에도 통지할 수 있을 것 같다
송이경(신지현): 글쎄, 에어태그가 더 편할 것 같은데...
체육관과 콘서트홀의 좌석 안내
스포츠 경기를 보러 갔을 때 표 번호를 몰라서 먼 길을 돌았지만 입장장과 좌석 블록에 가까이 가면 못 쓰겠지
그리고 맥주 판매원이 접근했을 때 알려주면 안 샀어요. 이런 경험이 줄어들까요?🍺
(어쨌든 일관이 끝나지 않으면 이루어질 수 없다고 생각한다.)
끝맺다
비록 iBeacon의 사용 방법과 잡다한 항목은 있지만, 나는 그것의 사용 방법을 고려해 보았다
앞으로 좋은 사용법 아이디어가 있다면 뭔가 더 하고 싶어요
감사합니다.
아, 송신기도 의외로 싸요. 관심 있으신 분들은 꼭 해보세요.
Reference
이 문제에 관하여(아이비콘의 용도에 대해서 생각을 해보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yudai_watanabe/items/2b94334fc6e76aff2a0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)