Handling Location Events in the Background

Panther·2021년 8월 22일
0

https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background

"Take advantage of background execution modes to respond to location-related events."

로케이션 관련 이벤트에 응답하기 위해 백그라운드 실행 모드를 활용합니다.

Overview

보통 앱은 대부분의 위치 서비스를 포어그라운드에서 사용하지만, 몇 가지 위치 서비스는 백그라운드에서 실행될 수 있으며, 시스템이 앱을 launch 하도록 할 수도 있습니다. 백그라운드에서 이벤트를 받으려면 Xcode에서 "Location updates" 기능을 설정해야 합니다. 아래 이미지에서 보이는 것과 같습니다. CLLocationManager 객체의 allowsBackgroundLocationUpdates 속성을 true로 설정하는 것도 필요합니다.

위치 업데이트가 앱이 백그라운드에 있는 동안 발생하면 시스템은 앱을 launch 하고 application(_:willFinishLaunchingWithOptions:) 혹은 application(_:didFinishLaunchingWithOptions:) 메소드로 옵션 딕셔너리를 전달합니다. 딕셔너리는 앱 launch로 생기는 위치 서비스를 나타내는 위치 키를 포함할 것ㅇ비니다. 그러나 이 키는 항상 존재하는 것이 아니며 위치 이벤트가 발생했다고 하더라도 존재하지 않을 수 있습니다. 보류중인 위치 업데이트를 받으려면 아래처럼 해야 합니다.

  1. 앱이 launch 되고 위치 매니저 인스턴스를 갖고 있지 않다면 CLLocationManager 객체를 생성하고 이 객체의 딜리게이트를 설정해야 합니다.
  2. 위치 모니터링 서비스를 다시 시작해야 합니다. 앱의 필요에 따라 보류중인 업데이트를 받기 위해 startMonitoringVisits(), startMonitoringSignificantLocationChanges(), startMonitoring(for:) 중 한 가지를 호출해야 합니다. 보류중입 업데이트를 받으려고 startUpdatingLocation()을 호출할 필요는 없습니다.

위치 모니터링 서비스는 코어 로케이션에게 모니터링을 멈추라고 지시할 때까지 계속됩니다. 앱이 더 이상 위치 업데이트가 필요하지 않으면 stopMonitoringVisits(), stopMonitoringSignificantLocationChanges(), stopMonitoring(for:) 중 한 가지를 호출해야 합니다.

아래 테이블은 새로운 위치 업데이트를 알리기 위해 앱을 launch 하는 서비스를 리스트로 보여주고 있습니다. 앱을 다시 launch 하는 서비스 역시 이렇게 하며 사용자가 앱을 강제종료한 후에도 마찬가지입니다.

ServiceLaunches app
Standard location serviceNo
Significant-change location serviceYes
Visits serviceYes
Region monitoring
Yes
iBeacon rangingNo
Heading serviceNo

Note
코어 로케이션은 백그라운드에서 위치 이벤트 전달을 계속합니다. 이는 사용자가 앱 혹은 모든 앱에 대해 백그라운드 앱 리프레시 설정을 비활성화로 설정해도 그렇습니다. 백그라운드 리프레시 상태에 대한 더 많은 정보는 backgroundRefreshStatus를 보시기 바랍니다.

backgroundRefreshStatus
https://developer.apple.com/documentation/uikit/uiapplication/1622994-backgroundrefreshstatus
https://velog.io/@panther222128/backgroundRefreshStatus

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 Significant-Change Location Service

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

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

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개의 댓글