Swifter {Swift Developer}

메뉴

iOS8에서 위치정보 얻는 방법이 변경

ios8-gps1

이 내용은 WWDC 2014 발표내용을 기준으로 정리한 내용입니다.

iOS8에서 위치정보를 얻는 방법이 변경된 것 같습니다.

ioS 8 : Location Services not working (stackoverflow)

My app that worked fine in iOS 7 does not work with the iOS 8 SDK.

CLLocationManager does not return a location, and I do not see my app under> Settings> Location Services either. I did a Google search on the issue but nothing> came up, what could be wrong?

확인사항

  • 위치정보에 대한 개인정보를 사용자가 보다 상세히 설정할 수 있게 되었습니다. (WhenInUse-사용중인 경우만 허용/Always-항상허용/Never-허용안함)
  • 위치 정보를 사용하는 이유를 설정하는 것이 필수가 되었습니다.
  • 위치 정보 인증요청 방법이 늘어났습니다.

어떻게 대처해야 하나?

우선 Info.plist에 위치정보를 사용하는 목적을 추가합니다. 이 항목은 지금까지는 사용하지 않았지만 iOS8에서는 필수항목이 되었습니다.

ios8-gps2

키 이름은 개인정보 보호정책에 따라 다르지만, 사용중인 경우에만 허용한다면 NSLocationWhenInUseUsageDescription, 항상 허용은 NSLocationAlwaysUsageDescription에 설정합니다.

인증 상태 확인

인증 상태 종류가 늘어났습니다.

  • kCLAuthorizationStatusNotDetermined
  • kCLAuthorizationStatusRestricted
  • kCLAuthorizationStatusDenied
  • kCLAuthorizationStatusAuthorized ( deprecated )
  • kCLAuthorizationStatusAuthorizedAlways
  • kCLAuthorizationStatusAuthorizedWhenInUse

kCLAuthorizationStatusAuthorized는 비추천되었고, kCLAuthorizationStatusAuthorizedAlways, kCLAuthorizationStatusAuthorizedWhenInUse를 사용하도록 권고합니다.

ioS8에서 위치 정보가 잡히지 않는 경우 인증상태가 kCLAuthorizationStatusNotDetermined로 되어 있을 가능성이 있습니다. 현재 인증 상태는 다음 델리게이트에서 확인할 수 있습니다.

[objc]

// CLLocationManager 객체에 위임객체를 설정하면 처음호출
– (void)locationManager:(CLLocationManager *)manager
didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusNotDetermined) {
// 사용자 위치정보 사용 허용않음
}
}

[/objc]

사용자가 위치정보를 허용하지 않으면, 다음에 설명하는 인증요청 사용을 통해 위치정보 사용권한을 요청합니다.

인증 요청

iOS8 CLLocationManager에 다음 메소드가 추가되었습니다.

  • requestAlwaysAuthorization :  위치정보 사용을 항상 허용해달라고 요청
  • requestWhenInUseAuthorization : 위치정보 사용을 앱시작시에만 허용해달라고 요청

단, iOS7 환경에서는 이 메소드를 호출하면 당연히 충돌나기 때문에 주의해야 합니다. 이 메소드를 호출하여 인증대화창이 표시됩니다. 대화창에는 처음에 설정한 위치 정보 사용 목적도 표시됩니다.

ios8-gps3

이 메소드는 여러번 호출할 수 있지만, 인증대화창이 표시되는 것은 인증 상태가 kCLAuthorizationStatusNotDetermined으로 되어 있을때만 가능합니다. 이렇게 하여 위치정보를 가져올 수 있게 됩니다.

참고자료: What’s New in Core Location – WWDC 2014 발표자료

 

 

 

 

Facebook Comments

카테고리:   잡담

댓글

죄송하지만 댓글은 닫혀 있습니다.