iOS 13 이후 위치 정보 사용 허가

6527 단어 iOSSwifttech
iOS 13 이후 위치 정보 이용 허가와 관련해 필요한 것들과 무엇을 수행하면 어떤 결과가 돌아올지 등을 정리했다.

위치 정보 활용에 필요한 준비

  • Info.plist에 NSLocationWhenInUseUsageDescription 또는 NSLocationAlwaysAndWhenInUseUsageDescription 또는 둘을 추가합니다.
  • NSLocationWhenInUseUsageDescription 프로그램이 전방에서 실행되고 위치 정보에 접근할 때 사용하도록 지정합니다.
  • NSLocationAlwaysAndWhenInUseUsageDescription 애플리케이션이 백그라운드에서 실행되고 위치 정보에 액세스하도록 지정합니다.
  • 위치 정보 사용 허가 상태


    CLAuthorizationStatus



    정의
    의향
    0
    notDetermined
    선택되지 않음/정의되지 않음
    1
    restricted
    더블 임대 통제 등의 영향을 받아 제한 중이다
    2
    denied
    사용 거부
    3
    authorizedAlways
    항상 사용 가능
    4
    authorizedWhenInUse
    사용 내에서만 사용 가능

    설정 응용 프로그램에서 확인할 수 있는 위치 정보의 사용 허가 상태 목록


    정의
    시험을 준비하다
    없음
    허용되지 않음(CLAuthorization Station = denied)을 선택합니다.
    다음 확인
    한 번만 허용 등(CLAuthorization Station = notDetermined)*
    이 App만 사용 가능
    App 사용 시 허용(CLAuthorization Station = authhorizedWhen InUse)을 선택합니다.
    언제나
    라이센스로 항상 변경(CLAuthorization Station = authhorized Always)을 선택합니다.
    ü위치 정보 사용 허가 경보에서 "한 번만 허용"을 선택하면 애플리케이션을 시작하는 동안 authrizedWhen InUse 상태가 되므로 위치 정보를 활용할 수 있습니다(설정 애플리케이션의 디스플레이에서 "다음 확인").그러나 응용 프로그램을 종료하면 notDetermined 상태가 됩니다.

    위치 정보 사용 허가에 대한 경보


    locationManager.requestAlwaysAuthorization()
    
    locationManager.requestWhenInUseAuthorization()
    
    는 상기 임의의 호출에서 응용 사용 중인 위치 정보의 사용 허가 경보를 표시할 수 있다.사용 허가의 상태가 변경되었을 때 다음과 같은 방법이라고 한다.
    locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
    
    requestAlwaysAuthorization를 사용할 때는 Info입니다.plistNSLocationAlwaysAndWhenInUseUsageDescription가 필요합니다.requestWhenInUseAuthorization를 사용할 때는 Info입니다.plistNSLocationWhenInUseUsageDescription가 필요합니다.
    iOS 13 이후 어떤 호출이든 다음 화면이 표시됩니다. (프로그램을 사용할 때만 허용됩니다.)설명문에도 NSLocationWhenInUseUsageDescription에 지정된 문이 표시됩니다.또한 주의해야 할 것은 이것들은 상태가 notDetermined일 때만 표시됩니다.
    requestWhenInUseAuthorization에서 상기 화면을 호출할 때'앱 사용 허용'을 선택하면 authorizedWhen InUse가 되돌아오고 앱의 디스플레이를 설정해도 이 앱만 사용할 수 있다.
    requestAlwaysAuthorization에서 호출할 때'앱 사용 중 허용'을 선택하면 상태는 authorized Always로 되돌아오지만 설정 프로그램의 표시는'이 앱만 허용'이다.코드에 있는 위치 정보의 사용 허가 상태는 authorized Always이지만 설정 프로그램에서'이 앱만 사용 가능'과 일치하지 않습니다.운영 체제에서 애플리케이션을 사용하지 않는 경우에도 위치 정보를 사용하는 경고(이하 화면)가 자동으로 표시되고 항상 라이센스로 변경을 선택합니다.
    따라서 requestAlwaysAuthorization 중'앱 사용 중 허용'을 선택할 때의 상태는 authhorized Always가 일시적이며, 다음 경보 중'상시 허가로 변경'을 선택해야 확인할 수 있다.반면 사용권만 유지를 선택하면 상태는 authrizedWhen InUse로 변경되고 설정 애플리케이션의 디스플레이는 "이 앱을 사용할 때만 허용"으로 변경됩니다.

    값 요약 표시/반환


    라이센스 요구 사항 사용 방법
    사용 가능한 선택 여부
    CLAuthorization Station의 값을 반환합니다.
    응용 프로그램의 디스플레이 설정
    requestAlwaysAuthorization
    "App 허용"
    authorizedAlways
    "이 앱만 허용"
    requestAlwaysAuthorization
    "한 번만 허용".
    authorizedWhenInUse → notDetermined *
    "다음에 확인해요".
    requestAlwaysAuthorization
    "허용되지 않음"
    denied
    없음
    requestWhenInUseAuthorization
    "App 허용"
    authorizedWhenInUse
    "이 앱만 허용"
    requestWhenInUseAuthorization
    "한 번만 허용".
    authorizedWhenInUse → notDetermined *
    "다음에 확인해요".
    requestWhenInUseAuthorization
    "허용되지 않음"
    denied
    없음
    ● "한 번만 허용"을 선택하면 프로그램을 종료하지 않으면 authorizedWhen InUse 상태가 되고, 프로그램을 종료하면 notDetermined 상태가 됩니다.

    애플리케이션을 사용하지 않은 경우 위치 정보를 표시하는 라이센스 경고(사용 내에서만 라이센스 유지 또는 항상 라이센스로 변경을 선택)에 대한 경고 방법


    위에서 말한 바와 같이 코드의 위치 정보의 사용 허가 상태와 설정 프로그램의 상태가 미묘하게 일치하지 않는 경우를 나타낸다.설정 프로그램의 디스플레이를 '항상' 으로 변경하기 위해서는 주로 다음과 같은 절차가 있다.
  • requestAlwaysAuthorization에서 "App을 사용할 때 허용"을 선택하여 App을 사용하지 않을 때도 사용할지 확인하는 경고를 자동으로 표시하고 "항상 라이센스로 변경"
  • 을 선택합니다.
  • 설정 응용에서 해당 응용의 위치 정보로 사용 허가의 설정을'항상'
  • 으로 변경
    1. 일반적인 절차이지만 응용 프로그램이 사용되지 않았을 때의 위치 정보를 표시하는 사용 허가 경보가 언제 나타날지 모르기 때문에 표시 시간을 제어할 수 없습니다.2. 사용자는 명시적으로 변경할 수 있지만 설정 프로그램을 한 번 열어야 합니다.
    일반적인 경우, 이를 '자주' 로 바꾸기 위해서는 자동으로 표시되는 프로그램을 사용할 때의 위치 정보의 사용 허가가 없다는 것을 주의해야 한다.이것을 강제로 표시하는 방법을 소개한다.구체적으로 다음과 같은 순서로 강제로 표시할 수 있다.
  • requestWhenInUseAuthorization에 응용 프로그램의 위치 정보를 표시하는 사용 허가 경보
  • App 사용 시 허용(CLAuthorization Station을 authorizedWhenInUse
  • 로 변경
  • requestAlwaysAuthorization에서 사용하지 않을 때의 위치 정보를 표시하는 사용 허가 경보
  • 항상 라이센스로 변경(CLAuthorization Station 변경authorizedAlways)
  • 을 선택합니다.
    우선 requestWhenInUseAuthorization에서 "App 사용 허용"을 선택하면 authrizedWhen InUse 상태가 됩니다.이 상태에서 requestAlwaysAuthorization를 호출하면 응용 프로그램을 사용하지 않았을 때의 위치 정보 사용 허가 경보가 표시됩니다.단, requestWhenInUseAuthorization에서 "한 번만 허용"을 선택하면 authrizedWhen InUse 상태에서 호출requestAlwaysAuthorization해도 적용되지 않은 위치 정보에 대한 사용 허가 경보가 표시되지 않습니다.
    일반적인 절차에서 자동으로 표시되는 프로그램을 사용하지 않을 때 위치 정보에 대한 사용 허가 경보가 표시되는 이유는 아직 자세히 조사하지 않았습니다...다만 통상 프로세스에서 2단계(사용 중→상시)로 위치 정보를 사용자에게 확인하는 허가가 이뤄졌기 때문에 가능하다고 판단했다.또 iOS 13.7과 iOS 14.4를 통해 동작 확인을 확인했다.

    샘플 코드


    참고 자료


    https://qiita.com/gaussbeam/items/96612baed85edb8f7c6d
    https://qiita.com/YujiHamada3/items/3d750c336ecfb51677d0
    https://support.fanship.jp/hc/ja/articles/360046873654-위치 정보를 요약하는 라이센스 대화 상자 - iOS13-Android 10 -

    좋은 웹페이지 즐겨찾기