このページでは

アプリケーションの権限

今日のデバイスやオペレーティングシステムの多くの機能は、誤用された場合、プライバシー、セキュリティ、およびパフォーマンスに重大な影響を及ぼす可能性があります。そのため、プラットフォームがこれらの機能にアクセスする前に、ユーザーからの明示的な同意を求めることがますます一般的になっています。

Qtの権限APIを使用することで、アプリケーションはクロスプラットフォームな方法で、こうした機能に関する権限を確認したり、要求したりすることができます。

使用方法

一般的にユーザーの同意を必要とする機能として、デバイスのマイクへのアクセスが挙げられます。音声メモを録音するアプリケーションの初期実装は、おそらく次のようなものになるでしょう:

void VoiceMemoWidget::onRecordingInitiated()
{
    m_microphone->startRecording();
}

マイクへのアクセスにユーザーの同意が必要なプラットフォームでもこのアプリケーションが正常に動作するようにするには、次のように機能を拡張します:

voidVoiceMemoWidget::onRecordingInitiated()
{
    QMicrophonePermission microphonePermission;
    switch(qApp->checkPermission(microphonePermission)) {
    caseQt::PermissionStatus::Undetermined:
        qApp->requestPermission(microphonePermission, this,
                   &VoiceMemoWidget::onRecordingInitiated);
        return;
    caseQt::PermissionStatus::Denied:
        m_permissionInstructionsDialog->show();
        return;
    caseQt::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の権限と機能」を参照してください。

利用可能な権限

以下の権限タイプが利用可能です:

QBluetoothPermission

Bluetooth周辺機器へのアクセス

QCalendarPermission

ユーザーのカレンダーへのアクセス

QCameraPermission

写真や動画の撮影のためのカメラへのアクセス

QContactsPermission

ユーザーの連絡先にアクセスする

QLocationPermission

ユーザーの現在地へのアクセス

QMicrophonePermission

音声のモニタリングや録音のためのマイクへのアクセス

注: 利用可能な権限の種類には 、Qt Multimedia やQt Positioning などのQtモジュールの主要機能が含まれていますが、プラットフォーム固有のすべての権限を網羅しているわけではありません。カスタム権限の種類は現在サポートされていません。

ベストプラクティス

エンドユーザーに最高のユーザー体験を提供するために、アプリケーションの権限管理においては以下のベストプラクティスを採用することを推奨します:

  • 必要な最小限の権限のみを要求してください。たとえば、マイクへのアクセスのみが必要な場合は、念のためカメラの権限を要求しないでください。個々の権限タイプのプロパティを使用して、権限の範囲をさらに限定してください。たとえば、QContactsPermission::setAccessMode() を使用すると、読み取り専用アクセスを要求できます。
  • ユーザーの特定のアクションに応じて権限を要求してください。例えば、ユーザーが音声録音ボタンを押すまで、マイクへのアクセス権限の要求を遅らせてください。権限の要求を特定のアクションに関連付けることで、ユーザーはなぜその権限が必要なのかという文脈をより明確に理解できます。起動時に必要なすべての権限を一度に要求しないでください。
  • 必要に応じて、追加のコンテキストや説明を表示してください。ユーザーの操作だけでは十分なコンテキストとならない場合があります。ユーザーが操作を開始した後、権限を要求する前に説明ダイアログを表示することを検討してください。そうすることで、その後システム権限ダイアログが表示された際に、ユーザーはこれから何が起こるのかを把握できるようになります。
  • 権限が必要な理由について、透明性を持って明確に説明してください。説明ダイアログや使用方法の説明では、アプリケーションが特定の機能を提供するためにその権限が必要な理由を透明性を持って説明し、ユーザーが十分な情報に基づいて判断できるようにしてください。
  • 権限の拒否に備えてください。要求した権限は、さまざまな理由で拒否される可能性があります。常にこの状況に備え、アプリケーションの動作を適切に調整するとともに、ユーザーに対して状況を明確に説明してください。
  • ライブラリから権限を要求してはいけません。権限の要求は、ユーザーにできるだけ近い場所で行う必要があります。そうすることで、上記の点について適切な判断を下すために必要な情報が利用可能になります。 ライブラリは、自身の処理を行うための前提条件が満たされていることを確認するために権限をチェックできますが、権限の状態が不明または拒否された場合は、その状態がライブラリのAPIを通じて反映されるべきです。そうすることで、アプリケーション側で必要な権限を改めて要求できるようになります。

「情報プロパティリストファイル」および「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.