Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

iOS 앱에서 위치 서비스 활성화 여부 확인하는 방법

iOS 위치 서비스란 무엇인가?

위치 서비스(Location Services)는 이름 그대로 GPS, Wi-Fi, 셀룰러 기지국 정보를 활용해 사용자의 위치 정보를 수집하는 기능입니다. 모든 iOS 기기에는 GPS, Wi-Fi, 기지국 위치 데이터, 블루투스가 내장되어 있어 iPhone이나 iPad의 현재 위치를 정확하게 파악할 수 있습니다.

사용자는 설정 앱에서 개인정보 보호 및 보안 → 위치 서비스(iOS 구버전에서는 개인 정보 보호 항목)에 있는 스위치를 통해 위치 서비스를 자유롭게 켜거나 끌 수 있습니다.

위치 서비스 상태를 확인해야 하는 이유

앱에서 위치 업데이트를 시작하기 전에는 반드시 locationServicesEnabled() 메서드의 반환값을 확인해야 합니다. 사용자가 기기 차원에서 위치 서비스를 꺼두었다면, 아무리 앱 내에서 위치 권한을 요청해도 정상적으로 동작하지 않기 때문입니다.

즉, 다음 두 가지를 모두 점검해야 안정적인 위치 기반 기능을 제공할 수 있습니다.

  • 기기 전체의 위치 서비스가 켜져 있는지 여부
  • 해당 앱의 위치 접근 권한이 허용되었는지 여부

Swift 코드로 확인하기

Xcode에서 새 프로젝트를 생성한 뒤 ViewController에 아래 함수를 추가하면 됩니다.

func isLocationAccessEnabled() {
   if CLLocationManager.locationServicesEnabled() {
      switch CLLocationManager.authorizationStatus() {
         case .notDetermined, .restricted, .denied:
            print("No access")
         case .authorizedAlways, .authorizedWhenInUse:
            print("Access")
      }
   } else {
      print("Location services not enabled")
   }
}

코드 설명

  • CLLocationManager.locationServicesEnabled(): 기기 전체의 위치 서비스가 활성화되어 있는지 확인합니다.
  • .notDetermined: 아직 사용자에게 권한을 요청하지 않은 상태입니다.
  • .restricted: 시스템 또는 관리자 정책으로 인해 위치 사용이 제한된 상태입니다.
  • .denied: 사용자가 명시적으로 위치 접근을 거부한 상태입니다.
  • .authorizedAlways, .authorizedWhenInUse: 각각 항상 허용, 앱 사용 중 허용 상태로 위치 정보에 접근할 수 있습니다.

참고 사항

iOS 14 이상에서는 CLLocationManager.authorizationStatus() 클래스 메서드가 deprecated되었으므로, CLLocationManager 인스턴스의 authorizationStatus 프로퍼티를 사용하는 것이 권장됩니다. 또한 권한 변경을 실시간으로 감지하려면 locationManager(_:didChangeAuthorization:) 델리게이트 메서드를 함께 구현하는 것이 좋습니다.