애플리케이션 권한
오늘날의 기기와 운영 체제의 많은 기능은 오용될 경우 개인정보 보호, 보안 및 성능에 중대한 영향을 미칠 수 있습니다. 따라서 플랫폼에서 이러한 기능에 접근하기 전에 사용자의 명시적인 동의를 요구하는 경우가 점점 더 흔해지고 있습니다.
Qt 권한 API를 사용하면 애플리케이션이 크로스 플랫폼 방식으로 이러한 기능에 대한 권한을 확인하거나 요청할 수 있습니다.
사용법
일반적으로 사용자 동의가 필요한 기능 중 하나는 기기의 마이크에 대한 접근 권한입니다. 음성 메모를 녹음하는 애플리케이션의 초기 코드는 대략 다음과 같을 것입니다:
void VoiceMemoWidget::onRecordingInitiated()
{
m_microphone->startRecording();
}마이크 접근 권한에 대한 사용자 동의가 필요한 플랫폼에서도 이 애플리케이션이 원활하게 작동하도록 하려면 다음과 같이 기능을 확장해야 합니다:
void VoiceMemoWidget::onRecordingInitiated()
{
QMicrophonePermission microphonePermission;
switch (qApp->checkPermission(microphonePermission)) {
case Qt::PermissionStatus::Undetermined:
qApp->requestPermission(microphonePermission, this,
&VoiceMemoWidget::onRecordingInitiated);
return;
case Qt::PermissionStatus::Denied:
m_permissionInstructionsDialog->show();
return;
case Qt::PermissionStatus::Granted:
m_microphone->startRecording();
}
}먼저 마이크 권한의 상태를 이미 알고 있는지 확인합니다. 만약 모른다면, 현재 상태를 파악하기 위해 권한 요청을 시작하며, 이 과정에서 사용자에게 동의를 요청할 수도 있습니다. 요청 결과를 현재 위치한 슬롯에 연결하여, 권한 상태를 다시 한 번 평가할 기회를 얻습니다.
권한 상태가 확인되면(이전에 권한이 승인되었거나 거부된 경우, 혹은 방금 시작한 요청의 결과를 받은 경우), 사용자를 대화 상자로 리디렉션하여 현재 음성 메모를 녹음할 수 없는 이유를 설명하거나(권한이 거부된 경우), 마이크를 사용할 수 있도록 진행합니다 (권한이 승인된 경우)로 넘어갑니다.
참고: macOS 및iOS에서는 현재 GUI 애플리케이션에 대해서만 권한을 요청할 수 있습니다.
권한 선언
일부 플랫폼에서는 요청하는 권한을 빌드 시점에 미리 선언해야 합니다.
Apple 플랫폼
요청하는 각 권한에는 애플리케이션의 Info.plist 파일에 소위 ‘사용 설명 문자열’을 함께 포함해야 하며, 이 문자열은 애플리케이션이 해당 권한에 접근해야 하는 이유를 설명해야 합니다. 예를 들어:
<key>NSMicrophoneUsageDescription</key>
<string>The microphone is used to record voice memos.</string>관련 사용 설명 키는 각 권한 유형에 대한 문서에 설명되어 있습니다.
애플리케이션에 관련 권한 백엔드가 포함되도록 하려면, 빌드 시스템에서 사용자 정의 ` Info.plist` 파일을 지정해 주십시오.
Android
요청하는 각 권한에 대해 애플리케이션의 ` AndroidManifest.xml ` 파일에 ` uses-permission ` 항목이 반드시 포함되어야 합니다. 예:
<manifest ...>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>애플리케이션에 관련 권한 백엔드가 포함되도록 하려면, 빌드 시스템이 사용자 정의 AndroidManifest.xml 파일을 참조하도록 설정하거나 qt_add_android_permission()을 사용하십시오.
관련 권한 이름은 각 권한 유형에 대한 설명서에 자세히 나와 있습니다.
참고: 이 API를 사용할때는 AndroidManifest.xml 파일에 <!-- %%INSERT_PERMISSIONS --> 태그가 반드시 포함되어야 합니다. 이 태그의 사용에 대한 자세한 내용은 Qt Permissions and Features를 참조하십시오.
사용 가능한 권한
다음과 같은 권한 유형을 사용할 수 있습니다:
블루투스 주변기기 액세스 | |
사용자의 캘린더에 접근 | |
사진 또는 동영상 촬영을 위한 카메라 접근 | |
사용자의 연락처에 접근 | |
사용자의 위치 정보에 접근 | |
소리 모니터링 또는 녹음을 위한 마이크 접근 |
참고: 사용 가능한 권한유형은 Qt Multimedia 및 Qt Positioning 와 같은 Qt 모듈의 핵심 기능을 포함하지만, 모든 플랫폼별 권한을 포괄하지는 않습니다. 사용자 정의 권한 유형은 현재 지원되지 않습니다.
모범 사례
최상의 사용자 경험을 보장하기 위해, 애플리케이션 권한 관리 시 다음 모범 사례를 따를 것을 권장합니다:
- 필요한 최소한의 권한만 요청하십시오. 예를 들어, 마이크에 대한 액세스만 필요한 경우, 만일을 대비해 카메라 권한을 요청하지 마십시오. 개별 권한 유형의 속성을 사용하여 권한 범위를 더욱 제한하십시오. 예를 들어, ` QContactsPermission::setAccessMode()`를 사용하여 읽기 전용 액세스 권한을 요청할 수 있습니다.
- 사용자의 특정 동작에 대응하여 권한을 요청하십시오. 예를 들어, 사용자가 오디오 녹음 버튼을 누를 때까지 마이크 권한 요청을 미루십시오. 권한 요청을 특정 동작과 연계하면 사용자에게 해당 권한이 필요한 이유를 더 명확하게 전달할 수 있습니다. 앱 시작 시 필요한 모든 권한을 한꺼 번에 요청하지 마십시오.
- 필요한 경우 추가적인 맥락과 설명을 제공하십시오. 때로는 사용자의 동작만으로는 충분한 맥락을 제공하지 못할 수 있습니다. 사용자가 동작을 시작한 후, 권한을 요청하기 전에 설명 대화 상자를 표시하여, 이후 시스템 권한 대화 상자가 나타날 때 사용자가 어떤 일이 일어날지 미리 알 수 있도록 하십시오.
- 권한이 필요한 이유에 대해 투명하고 명확하게 설명하십시오. 설명 대화상자 및 사용법 설명에서, 앱이 특정 기능을 제공하기 위해 해당 권한이 필요한 이유를 투명하게 밝혀 사용자가 충분한 정보를 바탕으로 결정할 수 있도록 하십시오.
- 권한 거부 시의 대응 방안을 마련하십시오. 요청한 권한은 다양한 이유로 거부될 수 있습니다. 항상 이러한 상황에 대비하여, 애플리케이션의 기능을 부드럽게 축소하고 사용자에게 상황에 대한 명확한 설명을 제공해야 합니다.
- 절대 라이브러리를 통해 권한을 요청하지 마십시오. 권한 요청은 위 사항들에 대해 올바른 결정을 내리는 데 필요한 정보를 얻을 수 있는, 사용자와 최대한 가까운 곳에서 이루어져야 합니다. 라이브러리는 자체 기능을 수행하는 데 필요한 전제 조건이 충족되었는지 확인하기 위해 권한을 확인할 수 있지만, 권한 상태가 미확정되거나 거부된 경우 이는 라이브러리의 API를 통해 반영되어야 하며, 이를 통해 애플리케이션이 필요한 권한을 직접 요청할 수 있도록 해야 합니다.
‘정보 속성 목록 파일 (Information Property List Files )’ 및 ‘Qt Creator: 매니페스트 파일 편집’항목도 참조하십시오 .
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.