Getting the current location of a device
- 위치 서비스를 시작하고, 위치 서비스에 대한 전력 소모를 최적화하는데 필요한 정보를 제공하는 방법
개요
Core Location은 위치 관련 정보를 얻기 위한 여러 서비스를 제공한다.
가장 일반적인 서비스는 기기의 현재 위치를 반환하며, 정보를 아래와 같이 사용할 수 있다.
- 도보, 자동차, 기타 교통수단으로 안내하는데 용이
- 인근의 관심 지역 파악
- 개인화된 기준으로 검색 결과 필터링
- 현재 위치를 지도에 표시
- 현재 위치를 공유
- 사진의 위치 태그
- 소셜 미디어 체크인
- 누군가의 운동, 하이킹 루트 따라하기
Core Location은 Wi-Fi, 셀룰러, GPS 라디오를 포함한 다양한 타입의 하드웨어를 사용해 현재 위치를 결정할 수 있다.
Core Location은 위치를 결정하기 위해 이러한 모든 수단(radios)이 필요하지 않으며, 대신 라디오가 가능한 전력 효율적인 방식으로 필요한 위치 데이터를 얻을 수 있도록 지원한다.
CLLocationManager 개체의 구성은 시스템이 사용하는 라디오와 앱의 전력 소비에 영향을 미친다.
(여기서 말하는 radio는 무선 통신을 위한 하드웨어)
필요한 위치 데이터를 제공하기 위한 서비스 시작하기
항상 앱의 요구를 충족하는 가장 전력 효율적인 위치 서비스를 선택해야 한다.
Core Location이 제공하는 위치 데이터를 위한 서비스는 다음과 같다.
- Visits
- 위치 데이터를 얻을 수 있는 가장 전력 효율적인 방법 제공
- 이 시스템은 누군가가 방문한 장소와 그곳에서 보내는 시간을 모니터링하고, 나중에 그 데이터를 전달한다.
- 서비스를 시작하기 위해 startMonitoringVisits()를 호출
- Significant-change
- 위치 업데이트를 얻을 수 있는 저전력 방법을 제공
- 셀룰러 및 Wi-Fi 라디오(GPS가 아님)를 사용하여 상당히 먼 거리를 초과하는 위치 변경만 보고한다.
- 서비스를 시작하기 위해 startMonitoringSignificantLocationChanges()를 호출
- Standard
- 가장 정확하고 규칙적인 위치 데이터를 제공한다.
- 다른 서비스보다 더 많은 전력을 사용
- 앱이 턴 바이 턴 내비게이션을 제공하거나, 더 높은 정밀도 또는 이벤트 빈도가 필요한 경우 사용
- visionOS에서 실행되는 앱에서 사용할 수 있는 유일한 서비스
- 서비스를 시작하기 위해 startUpdatingLocation() 혹은 requestLocation()을 호출하여 단일 위치 이벤트를 가져올 수 있다.
위치 서비스를 즉시 시작해야 하는 앱은 거의 없으며, 이러한 서비스를 오랜 기간 계속 지속해야 하는 앱은 더욱이 적다.
사용자가 해당 정보를 요구하는 방식으로 앱과 상호 작용할 때까지 위치 서비스 시작을 지연시켜야 한다.
그런 다음, 필요한 위치 데이터가 있는 즉시, 배터리 수명을 절약하기 위해 서비스를 중단해야 한다.
예를 들어, 검색 결과를 한 번 필터링하기 위해 현재 위치만 필요한 경우 서비스를 중지해야 한다.
위치 서비스에 대한 지원을 추가할 때, delegate 객체에서 서비스의 모든 관련 메서드를 구현해야 한다.
Standard 및 Significant-change 위치 서비스는 동일한 delegate 메서드를 사용하지만, Visits 서비스에는 Visit-specific 데이터를 수신하는 별도의 메서드가 있다.
전력 절약 기능 활성화
Core Location은 가능한 한 전력 사용을 최적화하지만, 추가로 최적화할 수 있다.
가장 좋은 최적화는 앱에 새로운 위치 데이터가 필요하지 않을 때, 위치 서비스를 끄는 것이며, 다른 최적화는 Core Location 개체의 구성을 조정해야 한다.
- distanceFilter 속성
- 필요한 정보를 제공하는 가능한 가장 큰 값으로 설정
- 값이 높을수록 시스템이 무선 하드웨어를 더 자주 끌 수 있다.
- desiredAccuracy 속성
- 필요한 정보를 제공하는 가능한 가장 낮은 값으로 설정
- 정확도 값이 낮으면 시스템은 더 전력 효율적으로 하드웨어를 사용한다.
- 낮은 값은 시스템이 하드웨어를 더 빨리 끌 수 있게 만든다.
- activityType 속성
- 적절한 값으로 구성하고, pausesLocationUpdatesAutomatically 속성을 true로 설정한다.
- Core Location은 activityType을 사용하여 조건이 허락할 때 자동으로 하드웨어를 끈다.
- 예를 들어, activityType이 CLActivityType.automotiveNavigation, 위치가 변경되지 않는 경우에 시스템은 새로운 움직임을 감지할 때까지 무선 하드웨어를 끌 수 있다.
- allowsBackgroundLocationUpdates 속성
- 백그라운드 위치 업데이트가 필요하지 않을 때, false로 설정
전력 사용량을 개선하는 또 다른 방법은 앱의 Info.plist 파일에 true 값을 가진 NSLocationDefaultAccuracyReduced 키를 추가하는 것이다.
위치 데이터가 정확도가 낮아도 충분히 사용할만하다면, 이 키를 포함한다.
예를 들어, 운전 거리 내에 있는 식당 목록을 반환하는 앱은 사용자의 정확한 위치가 필요하지 않다.
필요에 따라, 언제든지 location manager를 사용하여 정확한 데이터를 요청할 수 있으며, 이를 위해선 사용자에게 정확한 위치를 위한 권한을 승인받아야 한다.
'Swift' 카테고리의 다른 글
SwiftUI: SwiftUI + Combine MVVM 아키텍쳐 분석 - 1 (0) | 2024.10.21 |
---|---|
SwiftUI: 시트, 모디파이어 (0) | 2024.10.21 |
Swift: CLLocationManager (0) | 2024.09.09 |
Swift: Core Location (0) | 2024.09.09 |
Swift: Managing user interface state (0) | 2024.08.22 |