AR 앱의 Camera Permission 취득 템플릿

2620 단어 iOSSwiftARKit

소개



최근 ARKit을 사용한 AR Cake Divider이라는 앱을 출시했습니다. 그러나, 최초의 릴리스시에 Apple Human Interface Guidelines의 Resuesting Permission(이하 AHIG)에 준거하고 있지 않다고 하는 것으로 리젝트를 받았습니다. AR 앱을 만드는데 Camera Permission은 필수가 되지만, Xcode의 디폴트 AR 프로젝트에서는 AHIG에 준거한 형태의 퍼미션 요구를 내주지 않습니다.
앱을 만들 때마다 수정하는 것은 번거롭기 때문에 템플릿 프로젝트을 만들고 GitHub에 게시했습니다.

AHIG의 Resuesting Permission의 요점


  • 앱은 위치 및 연락처와 같은 정보에 대한 액세스를 사용자가 제어 할 수 있어야합니다.
  • 정보에 대한 액세스 요청은 사용자가 분명히 앱이 해당 정보가 필요하다는 것을 알 때 수행해야합니다
  • 액세스 요청시 시스템에서 표시되는 대화 상자에 앱이 짧고 명확하게 왜 정보가 필요한지 작성해야합니다

  • 이 중 아무도 중요하지만, 두 번째는 "앱이 그 정보에 액세스할 수 없으면 동작할 수 없다면 제대로 요청을 내야 한다"는 것도 의미하고 있습니다.

    구체적으로는, 예를 들면 한 카메라 앱이 기동시에 카메라를 기동시키도록(듯이), 기동전에 퍼미션 요구를 실시했다고 합니다.
    일단 사용자가 '허용하지 않음'을 선택하면 앱을 다시 시작했습니다.
    그 때 앱은 한번 권한 취득을 할 수 없었기 때문에, 다시 요구를 내지 않고 그대로 상태였다고 합니다.

    이는 앱이 해당 정보가 필요할 때 요청을 하지 않은 것으로 간주됩니다. 앱이 해당 정보에 액세스할 수 없으면 작동할 수 없는 경우 다시 요청을 요청합니다.

    템플릿 프로젝트 포인트



    이상의 점을 감안하여 템플릿 프로젝트에서는 다음의 기능을 구현하고 있습니다.
  • 앱은 처음 시작할 때 Camera Permission을 가지고 있는지 확인합니다.
    let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)

  • 처음 시작할 때의 판단에 따라 앱이 Foreground가 된 시점에서
  • Camera Permission이 없으면 요청을 발행 ⇨ requestCameraPermission()
  • Camera Permission이 사용자에게 거절되면 앱이 작동하는 데 필요한 대화 상자를 표시하고 설정 앱으로 안내합니다. ⇨ alertCameraAccessNeeded()


  • 이를 위해 UIApplication.willEnterForegroundNotification을 모니터링합니다.
    NotificationCenter.default.addObserver(self, selector: #selector(checkPermission), name: UIApplication.willEnterForegroundNotification, object: nil)
  • 유저가 이해하기 쉽도록 다이얼로그의 메세지는 국제화한다
    ⇨ InfoPlist.strings, Localizable.strings

  • 스크린샷



    처음 시작할 때 대화상자


    "허용하지 않음"을 선택한 후 다시 시작할 때 대화상자

    좋은 웹페이지 즐겨찾기