"Get location updates in the most power-efficient way, but less frequently than with other services."
위치 업데이트를 가장 효율적인 방법으로 가져오지만, 다른 서비스에 비해 덜 빈번하게 가져옵니다.
방문기록 서비스는 위치 데이터를 수집하는 가장 효율적인 방법입니다. 이 서비스를 사용하면 시스템은 사용자의 움직임이 기록되기에 가치가 있을 때에만 위치 업데이트를 전달합니다. 각각의 업데이트는 위치와 해당 위치에서 지낸 시간을 포함합니다. 이 서비스는 네비게이션 혹은 다른 실시간 활동을 위한 목적을 지니지 않지만, 사용자의 움직임에 대한 패턴을 식별할 수 있고 이 패턴을 앱의 다른 부분에 적용할 수 있습니다. 예를 들어 음악 앱은 사용자가 체육관에 도착했을 때 체육관 플레이리스트를 준비할 수 있습니다.
Note
방문기록 위치 서비스는 권한을 요구합니다. 권한 요청에 방법에 대한 정보는 Requesting Authorization for Location Services를 보시기 바랍니다.
Requesting Authorization for Location Services
<>
방문기록 위치 서비스를 시작하려면 위치 매니저의 startMonitoringVisits()
를 호출해야 합니다. 이 서비스를 사용하면 위치 매니저는 자신의 distanceFilter
및 desiredAccuracy
속성을 무시합니다. 그렇기 때문에 두 속성을 설정할 필요는 없습니다. 위치 매니저는 자신의 딜리게이트 메소드인 locationManager(_:didVisit:)
으로 업데이트를 전달합니다.
전원을 절약하는 다른 방법은 위치 매니저 객체의 pausesLocationUpdatesAutomatically
속성을 true
로 설정하는 것입니다. 이 속성을 활성화 하는 것은 사용자가 움직이지 않을 가능성이 높을 때 시스템이 위치 하드웨어를 비활성화 함으로써 전원 소비를 줄일 수 있도록 합니다. 업데이트를 일시정지 하는 것이 해당 업데이트의 품질을 줄이진 않지만 배터리 수명을 상당히 많이 향상시킬 수 있습니다. 시스템이 언제 업데이트를 일시정지시킬지를 알 수 있도록 위치 매니저의 activityType
속성에 적합한 값을 할당해야 합니다.
Note
위치 데이터가 더 이상 필요하지 않은 경우 항상 위치 매니저 객체의stopMonitoringVisits()
메소드를 호출해야 합니다. 위치 업데이트를 중지시키지 않으면 시스템은 앱에 위치 데이터 전달을 계속하며, 이는 사용자의 배터리를 소모합니다.
방문기록 위치 서비스를 시작하면 최근에 캐시된 값이 딜리게이트에 즉시 알려집니다. 새 방문기록 데이터를 가져오면 위치 매니저는 딜리게이트의 locationManager(_:didVisit:)
메소드를 업데이트된 값과 함께 호출합니다.
Listing 1 Receiving visit updates
func locationManager(_ manager: CLLocationManager, didVisit visit: CLVisit) {
// Do something with the visit.
}
위치 매니저가 위치 업데이트를 전달할 수 없는 경우 위치 매니저는 딜리게이트 객체의 locationManager(_:didFailWithError:)
메소드를 호출합니다. 발생할 수 잇는 모든 오류를 처리하려면 항상 이 딜리게이트 메소드를 구현해야 합니다. 예를 들어 이 메소드는 사용자가 앱이 위치 서비스 사용에 대해 권한을 거부한 경우 호출됩니다. 이와 같은 시나리오에서 위치 관련 기능을 비활성화 하는 것을 원할 것이며, 어떤 기능이 사용 불가능한지 사용자에게 알려주길 원할 것입니다. 이전에 시작했던 서비스 역시 중단해야 합니다. Listing 2에서 설명하는 것과 같습니다.
Listing 2 Stopping location services when authorization is denied
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
if error.code == .denied {
// Location updates are not authorized.
locationManager.stopMonitoringVisits()
return
}
// Notify the user of any errors.
}
전력 소비를 절약할 수 있는 방법으로 위치 업데이트를 가져오지만, 표준 위치 서비스에 비해 덜 빈번하게 가져옵니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_significant-change_location_service
https://velog.io/@panther222128/Using-the-Significant-Change-Location-Service
구체화한 파라미터에 기반해 주기적인 위치 업데이트를 가져옵니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_standard_location_service
https://velog.io/@panther222128/Using-the-Standard-Location-Service
로케이션 관련 이벤트에 응답하기 위해 백그라운드 실행 모드를 활용합니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background
https://velog.io/@panther222128/Handling-Location-Events-in-the-Background
위도/경도 쌍과 해당 위치의 더 사용자 친화적 설명 사이를 변환합니다.
https://developer.apple.com/documentation/corelocation/converting_between_coordinates_and_user-friendly_place_names
https://velog.io/@panther222128/Converting-Between-Coordinates-and-User-Friendly-Place-Names
지도에 표시된 사용자의 위치를 리버스 지오코딩을 통해 정보를 갖는 텍스트 설명으로 변환합니다.
https://developer.apple.com/documentation/mapkit/mkmapview/converting_a_user_s_location_to_a_descriptive_placemark
https://velog.io/@panther222128/Converting-a-Users-Location-to-a-Descriptive-Placemark