TIL
🌱 난 오늘 무엇을 공부했을까?
- 앱에 대한 위치 관련 이벤트 전달을 시작 및 중지하는 데 사용하는 개체입니다.
📍 Declaration
class CLLocationManager : NSObject
📍 Overview
- 이 클래스의 인스턴스를 사용하여 Core Location 서비스를 구성, 시작 및 중지합니다.
- Location Manager 개체는 다음 위치 관련 활동을 지원합니다.
- 구성 가능한 정확도로 사용자의 현재 위치에서 크거나 작은 변화를 추적합니다.
- 온보드 나침반에서 방향 변경을 보고합니다.
- 사용자가 해당 지역에 들어오거나 나갈 때 개별 관심 영역을 모니터링하고 위치 기반 이벤트를 생성합니다.
- 주변 비콘에 범위를 보고합니다.
- CLLocationManagerDelegate 프로토콜에 따라 사용자 지정 개체를 delegate 속성에 할당합니다.
Location Manager 초기화가 완료되면 delegate에서 locationManagerDidChangeAuthorization(_:) 메서드를 호출하는 시스템을 놓치지 않도록 delegate를 즉시 할당합니다.
- Core Location은 CLLocationManager를 초기화한 스레드의 RunLoop를 사용하여 delegate 개체의 메서드를 호출합니다.
- 해당 스레드 자체에는 앱의 기본 스레드에서 발견되는 것과 같은 활성 RunLoop가 있어야 합니다.
- 시스템은 Location Manager를 생성할 때 즉시 delegate의 locationManagerDidChangeAuthorization(_:) 메서드를 호출하고 앱의 권한이 변경되면 다시 호출합니다.
- delegate는 모든 위치 및 제목 관련 업데이트 및 이벤트를 처리합니다.
- 연결된 Location Manager 개체에서 이벤트를 수신하는 데 사용하는 메서드입니다.
📍 Declaration
protocol CLLocationManagerDelegate
📍 Overview
- Location Manager는 delegate의 메서드를 호출하여 앱에 위치 관련 이벤트를 보고합니다.
- 앱별 개체에서 이 프로토콜을 구현하고 메서드를 사용하여 앱을 업데이트합니다.
- 예를 들어 현재 위치를 사용하여 지도에서 사용자의 위치를 업데이트하거나 사용자의 현재 위치와 관련된 검색 결과를 반환할 수 있습니다.
위치 관련 데이터를 수신하는 방법 외에도 잠재적인 오류를 처리하는 방법을 항상 구현합니다.
- 서비스를 시작하기 전에 CLLocationManager 개체의 delegate 속성에 delegate 개체를 할당합니다.
- Core Location은 서비스를 시작한 직후 delegation에게 캐시된 값을 보고하고 나중에 최신 값을 보고할 수 있습니다.
- 수신한 데이터 개체를 사용하기 전에 타임스탬프를 확인하십시오.
- Core Location은 CLLocationManager를 초기화한 스레드의 런루프에서 delegate 개체의 메서드를 호출합니다.
- 그 쓰레드는 앱의 메인 쓰레드에 있는 것과 같은 활성 런 루프를 가지고 있어야 합니다.
- 앱이 Location Manager를 생성하고 승인 상태가 변경될 때 delegation에게 알립니다.
📍 Declaration
optional func locationManagerDidChangeAuthorization(_ manager: CLLocationManager)
📍 Parameters
- manager
- 이벤트를 보고하는 Location Manager 개체입니다.
📍 Discussion
- 앱이 관련 개체의 CLLocationManager 인스턴스를 생성하고 앱의 인증 상태가 변경될 때
시스템이 이 메서드를 호출
합니다.
- 상태는 앱이 사용자의 위치에 액세스할 수 있는지 여부를 알려줍니다.
- 이 delegate 메서드를 사용하여 위치 정보를 사용하는 기능에 대한 응답으로 앱의 상태 변경을 관리합니다.
- 예를 들어 앱의 위치 관련 기능을 적절하게 활성화하거나 비활성화할 수 있습니다.
Important
Core Location은 사용자의 작업으로 인해 인증 상태가 변경될 때 항상 locationManagerDidChangeAuthorization(_:)을 호출합니다.
앱이 포그라운드에서 실행되든 백그라운드에서 실행되든 상관없이 앱이 CLLocationManager의 인스턴스를 생성할 때.
requestWhenInUseAuthorization() 또는 requestAlwaysAuthorization() 메서드를 호출한 후 사용자의 선택이 권한 부여 상태를 변경하지 않는 경우 Location Manager는 이 메서드에 현재 권한 부여 상태를 보고하지 않습니다.
Location Manager는 변경 사항만 보고합니다.
- 예를 들어 Location Manager는 상태가 CLAuthorizationStatus.notDetermined(사용자는 앱이 위치 서비스를 사용할 수 있는지 여부를 선택하지 않았습니다.)에서 CLAuthorizationStatus.authorizedWhenInUse(사용자가 앱을 사용하는 동안 위치 서비스를 시작하도록 승인했습니다.)로 변경될 때 이 메서드를 호출합니다.
📍 Events that Cause Authorization Status Changes
- 사용자의 행동에 따라 앱의 승인 상태가 변경됩니다.
- 사용자는 앱의 위치 정보 사용 권한을 언제든지 변경할 수 있습니다.
- 사용자는 다음을 수행할 수 있습니다.
- 설정 > 개인 정보 보호 > 위치 서비스 또는 설정 > (앱) > 위치 서비스에서 앱의 위치 인증을 변경합니다.
- 설정 > 개인 정보 > 위치 서비스에서 위치 서비스를 전체적으로 켜거나 끕니다.
- 설정 > 일반 > 재설정에서 위치 및 개인 정보 재설정을 선택합니다.
- Location Manager 프롬프트에 대한 사용자의 응답은 인증 상태를 변경할 수도 있습니다.
- 예를 들어, 사용자는 requestWhenInUseAuthorization() 또는 requestAlwaysAuthorization() 메서드 호출에 의해 시작된 프롬프트에 응답하여 권한 부여 상태를 변경할 수 있습니다.
항상 권한이 있는 앱의 경우 사용자는 위치 사용 알림 알림에 응답할 때 권한 상태를 사용 중으로 변경할 수 있습니다.
앱에 임시 권한이 있는 경우 사용자가 앱 사용을 중단하면 권한이 변경됩니다.