EEYatHo 앱 깎는 이야기

Document ) 지리적 지역 근접성 Monitoring 본문

iOS, Swift/WWDC, Session, Docu

Document ) 지리적 지역 근접성 Monitoring

EEYatHo 2024. 11. 1. 18:23
반응형

상태 모니터링을 사용하면 사용자가 특정 지역에 들어오거나 나가는 시점을 확인할 수 있습니다.

원본 링크

 

개요

  • 상태 모니터링(지오펜싱이라고도 함)은 사용자가 지리적 지역에 들어가거나 나갈 때 앱에게 신호를 보내는 것
  • 지역 모니터링을 사용하여 위치 관련 작업을 수행할 수 있음
  • 예를 들어, Reminders 앱은 사용자가 지정된 위치에 도착하거나 떠날 때 알림을 트리거하는 데 사용합니다. (아래 그림 참조)

  • iOS에서 시스템은 지역을 모니터링하고 조건이 만족 상태와 만족하지 않은 상태 사이에서 변경될 때 필요에 따라 앱을 깨웁니다.
  • macOS에서 조건 모니터링은 앱이 실행 중(포그라운드 또는 백그라운드)이고 사용자 시스템이 깨어 있는 동안에만 작동합니다.
  • 시스템은 지역 관련 알림을 전달하기 위해 Mac 앱을 시작하지 않습니다.

 

지리적 조건 정의 및 모니터링

  • CLCircularGeographicCondition 를 사용하여 지리적 좌표를 중심으로 하는 원형 영역을 정의합니다.
  • 조건의 반경은 경계를 정의합니다.
  • 모니터링하려는 조건을 정의하고 CLLocationManager객체의 startMonitoring(for:)메서드를 호출하여 시스템에 등록합니다.
  • 시스템은 사용자가 명시적으로 중지를 요청하거나 장치가 재부팅될 때까지 조건을 모니터링합니다.

 

  • 아래 코드는 메서드 호출자가 제공한 지점을 중심으로 조건을 구성하고 등록하는 방법을 보여줍니다.
  • 이 작업은 200m 반경을 사용하여 조건의 경계를 정의한 다음 Core Location에서 비동기적으로 AsyncSequence이벤트가 도착할 때까지 기다립니다.
Task {    
     // Create a custom monitor.
     let monitor = await CLMonitor("my_custom_monitor")
     // Register the condition for 200 meters.
     let center = myFirstLocation;
     let condition = CLCircularGeographicCondition(center: center1, radius: 200)
     // Add the condition to the monitor.
     monitor.add(condition, identifier: "stay_within_200_meters")
     // Start monitoring.
     for try await event in monitor.events {
         // Respond to events.
         if event.state == .satisfied {
             // Process the 200 meter condition.
         }
     }
}

 

[주의사항]

  • 조건은 특정 하드웨어 기능에 의존하는 공유 리소스입니다.
  • 모든 앱이 조건 모니터링에 참여할 수 있도록 하기 위해 Core Location은 단일 앱이 모든 유형의 20개 이상의 조건을 동시에 모니터링하는 것을 방지합니다.
  • 이 제한에 따라 모니터링하려는 항목의 우선순위를 지정합니다.

 

이벤트에 응답하기

  • 앱의 상태 변화가 있을 때마다 Core Location은 모니터의 AsyncSequence를 통해 이벤트를 제공합니다 .
  • 조건이 충족될 때 iOS 앱이 실행 중이 아니면 시스템은 앱을 시작하려고 시도합니다.
  • 앱이 다시 시작되면 동일한 식별자로 모니터를 다시 만드는 것은 사용자의 책임입니다.
  • 모니터링은 사용자가 재부팅 후 기기를 잠금 해제한 후에만 발생할 수 있습니다.
  • 조건이 변경되는 시점을 파악하려면 이벤트를 반복하는 것이 중요합니다.
Comments