Using the Significant-Change Location Service

Panther·2021년 8월 24일
0

https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_significant-change_location_service

"Get location updates in a power-friendly way, but less frequently than with the standard location service."

전력 소비를 절약할 수 있는 방법으로 위치 업데이트를 가져오지만, 표준 위치 서비스에 비해 덜 빈번하게 가져옵니다.

Overview

significant-change 위치 서비스는 위치 데이터가 필요한 앱을 위한 것으로 전력 소비에 더 유리한 대안입니다. 앱은 업데이트를 자주 요구하지 않거나 GPS의 정확도를 요구하지 않는 앱에 해당합니다. 서비스는 사용자의 위치를 확인하기 위해 저전력(와아피아, cellular 정보와 같은)에 의존합니다.이후 사용자의 위치가 500 미터 이상과 같은 많은 거리가 변경되었을 때에만 앱에 위치 업데이트를 전달합니다.

Note
significant-change 위치 서비스는 권한을 요구합니다. 권한 요청에 대한 정보는 Requesting Authorization for Location Services를 보시기 바랍니다.

Requesting Authorization for Location Services
<>

significant-change 위치 서비스를 사용하려면 위치 매니저의 startMonitoringSignificantLocationChanges() 메소드를 호출해야 합니다. 이 서비스를 사용하면 위치 매니저는 자신의 distanceFilterdesiredAccuracy 속성을 무시합니다. 그렇기 때문에 두 속성을 설정할 필요가 없습니다. 위치 매니저는 자신의 딜리게이트 메소드인 locationManager(_:didUpdateLocations:) 메소드로 업데이트를 전달합니다. Listing 1은 significant-change 위치 서비스가 사용 가능한지 확인하고 시작하는 방법을 보여주고 있습니다.

Listing 1 Starting the significant-change location service

func startMySignificantLocationChanges() {  
    if !CLLocationManager.significantLocationChangeMonitoringAvailable() {
        // The device does not support this service.
        return
    }
    locationManager.startMonitoringSignificantLocationChanges()
}

전원을 절약하는 다른 방법은 위치 매니저 객체의 pausesLocationUpdatesAutomatically 속성을 true로 설정하는 것입니다. 이 속성을 활성화하면 사용자가 움직일 가능성이 높지 않을 때 시스템이 위치 하드웨어를 비활성화할 수 있도록 해줍니다. 업데이트를 일시정지하는 것이 업데이트의 품질을 감소시키지는 않지만 배터리 수명을 상닿이 향상시킬 수 있습니다. 시스템이 언제 업데이트를 일시정지시킬지를 알 수 있도록 하려면 위치 매니저의 activityType 속성에 적합한 값을 할당해야 합니다.

Note
위치 데이터가 더 이상 필요하지 않은 경우 항상 위치 매니저 객체의 stopMonitoringSignificantLocationChanges() 메소드를 호출해야 합니다. 만약 위치 업데이트를 중단시키지 않을 경우 시스템은 앱에 위치 데이터 전달을 계속하며, 이는 사용자 기기의 베터리를 소모합니다.

Receiving Location Updates

significant-change 위치 서비스를 시작하면 최근에 캐시된 값이 딜리게이트로 즉시 알려집니다. 새 위치 데이터를 가져오면 위치 매니저는 업데이트된 값과 함께 딜리게이트의 locationManager(_:didUpdateLocations:) 메소드를 호출합니다. 위치 파라미터는 항상 적어도 하나의 위치를 가져오며, 둘 이상을 포함할 것입니다. 위치는 항상 결정되었던 순서대로 알려집니다. 그렇기 때문에 가장 최근의 위치는 배열에서 가장 마지막 아이템입니다. Listing 2에서 보이는 것과 같습니다.

Listing 2 Processing the most recent location update

func locationManager(_ manager: CLLocationManager,  didUpdateLocations locations: [CLLocation]) {
   let lastLocation = locations.last!
               
   // Do something with the location. 
}

위치 값을 사용하기 전에 CLLocation 객체의 타임스탬프를 확인해야 합니다. 시스템은 캐시된 위치를 반환할 것이기 때문에 아이템 스탬프를 확인하는 것은 즉시 인터페이스를 업데이트할지 새 위치를 기다릴지를 알 수 있도록 해줍니다.

위치 매니저가 위치 업데이트를 전달할 수 없는 경우 위치 매니저는 딜리게이트 객체의 locationManager(_:didFailWithError:) 메소드를 호출합니다. 발생할 수 있는 모든 오류를 처리하기 위해 이 딜리게이트 메소드를 항상 구현해야 합니다. 예를 들어 사용자가 앱에서 위치 서비스 사용을 거부한 경우 이 메소드가 호출됩니다. 이와 같은 시나리오에서 위치 관련 기능을 비활성화하길 원할 것이며, 어떤 기능이 사용 불가능한지 사용자에게 알리길 원할 것입니다. 이전에 시작했던 모든 서비스 역시 중단시켜야 하며, Listing 3에서 보이는 것과 같습니다.

Listing 3 Stopping location services when authorization is denied

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
   if let error = error as? CLError, error.code == .denied {
      // Location updates are not authorized.
      manager.stopMonitoringSignificantLocationChanges()
      return
   }       
   // Notify the user of any errors.
}

See Also


Using the Visits Location Service

위치 업데이트를 가장 효율적인 방법으로 가져오지만, 다른 서비스에 비해 덜 빈번하게 가져옵니다.

https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_visits_location_service
https://velog.io/@panther222128/Using-the-Visits-Location-Service

Using the Standard 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

Converting Between Coordinates and User-Friendly Place Names

위도/경도 쌍과 해당 위치의 더 사용자 친화적 설명 사이를 변환합니다.

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

Converting a User's Location to a Descriptive Placemark

지도에 표시된 사용자의 위치를 리버스 지오코딩을 통해 정보를 갖는 텍스트 설명으로 변환합니다.

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


0개의 댓글