iOS 8에서 위치 정보를 얻는 방법이 바뀝니다.

5825 단어 위치 정보iOS

WWDC 2014 발표 자료

이게 어떻게 된 일입니까?


위치 정보를 얻는 방법은 iOS 8에서 변경된 것으로 보입니다.지금까지의 방법이라면 위치 정보를 얻을 수 없습니다.(AppStore에서 이미 대기열에 추가된 애플리케이션은 해당되지 않습니다.)
iOS 8 : Location Services not working
My app that worked fine in iOS 7 doesn't work with the iOS 8 SDK.
CLLocationManager doesn't return a location, and I don't see my app under >Settings > Location Services either. I did a Google search on the issue but nothing >came up, what could be wrong?
▲ Stack Overflow에도 이 일에 대한 질문이 들어왔다

주안점

  • 사용자는 위치 정보에 대한 프라이버시를 더욱 상세하게 설정할 수 있다(지금까지 허용/허용되지 않은 두 가지 선택)
  • 사용 중에만 허용(When InUse)
  • 항상 허용(Always)
  • Never
  • 위치 정보의 사용 목적 설명 필요
  • 위치 정보 인증을 요청하는 방법 증가
  • 뭘 하면 좋을까요?


    우선 Info.plist에 위치 정보를 사용하는 목적을 기재한다.이 프로젝트는 지금까지 임의였지만 iOS 8에서 필수로 바뀌었다.

    WWDC 2014 발표 자료
    키 이름은 개인 정보 보호 정책에 따라 다릅니다.
    사용만 허용
    NSLocationWhenInUseUsageDescription
    항상 허용
    NSLocationAlwaysUsageDescription

    인증 상태 확인


    인증 상태의 종류도 늘었다.
  • kCLAuthorizationStatusNotDetermined
  • kCLAuthorizationStatusRestricted
  • kCLAuthorizationStatusDenied
  • kCLAuthorizationStatusAuthorized (deprecated)
  • kCLAuthorizationStatusAuthorizedAlways
  • kCLAuthorizationStatusAuthorizedWhenInUse
  • kCLAuthorizationStatusAuthorized 추천하지 않음kCLAuthorizationStatusAuthorizedAlways(자주 허용), kCLAuthorizationStatusAuthorizedWhenInUse(사용 중에만 허용) 증가
    iOS 8에서 위치 정보를 가져올 수 없는 경우 인증 상태는 kCLAuthorizationStatusNotDetermined일 수 있습니다.
    다음 경계 문자에서 현재 인증 상태를 검사할 수 있습니다.
    Objective-C:
    // CLLocationManager オブジェクトにデリゲートオブジェクトを設定すると初回に呼ばれる
    - (void)locationManager:(CLLocationManager *)manager
         didChangeAuthorizationStatus:(CLAuthorizationStatus)status
    {
        if (status == kCLAuthorizationStatusNotDetermined) {
            // ユーザが位置情報の使用を許可していない
        }
    }
    
    Swift:
    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        switch status {
        case .NotDetermined:
            // ユーザが位置情報の使用を許可していない
        }
    }
    
    사용자가 위치 정보를 사용할 수 없는 경우 아래 설명된 인증 요청 요청을 사용하여 위치 정보를 사용할 수 있습니다.

    인증 요청


    iOS 8에서 CLLocation Manager에 추가된 방법은 다음과 같습니다.
  • 요청은 항상 위치 정보의 사용을 허용한다
  • 요청은 응용 프로그램 시작 시에만 r e q u estWhen InUse Authorization 위치 정보 사용 허용
  • ※ iOS 7 환경에서 이 방법을 사용하면 당연히 붕괴될 수 있으니 주의하세요!
    이 메서드를 호출하면 인증 대화 상자가 표시됩니다.첫 번째 설정에 대한 위치 정보 사용 목적도 대화상자에 표시됩니다.

    WWDC 2014 발표 자료
    이 방법은 여러 번 호출할 수 있지만 인증 상태가 kCLAuthorizationStatusNotDetermined일 때만 인증 대화상자를 표시할 수 있습니다.
    이곳에서 허가를 받아야 위치 정보를 얻을 수 있다.

    안 맞으면 어떻게 되는 거예요?


    AppStore의 애플리케이션을 다운로드하여 iOS 8에서 실행할 때의 행동을 시도하고 싶지만 NDA를 위반할 수 있으므로 나중에 다시 쓰려고 합니다.
    2014/9/12 보충: 앱스토어에 나란히 있는 앱을 다운로드하여 iOS 8에서 실행되는 경우 이전처럼 위치 정보를 얻을 수 있습니다.따라서 이전에 발표된 응용 프로그램은 iOS 8을 지원하지 않기 때문에 갑자기 위치 정보를 얻을 수 없습니다!그렇지 않습니다.

    참조 링크


  • What’s New in Core Location - WWDC 2014 발표 자료(PDF)

  • iOS 8 : Location Services not working - SAckoverflow에 대한 질문

  • iOS 8의 위치 정보에 대한 개인 정보 보호 설정-Swift에 샘플 코드가 첨부되어 상세하게 설명
  • 이 기사http://blog.koogawa.com/entry/2014/08/12/191215도 공개됐다.

    좋은 웹페이지 즐겨찾기