アプリケーション許可
今日のデバイスやオペレーティング・システムの多くの機能は、悪用されるとプライバシー、セキュリティ、パフォーマンスに重大な影響を及ぼす可能性があります。そのため、これらの機能にアクセスする前にユーザーからの明示的な同意を必要とするプラットフォームがますます一般的になっています。
QtのパーミッションAPIは、アプリケーションがクロスプラットフォームでそのような機能のパーミッションをチェックしたり要求したりすることを可能にします。
使用方法
一般的にユーザーの同意を必要とする機能は、デバイスのマイクへのアクセスです。ボイスメモを録音するためのアプリケーションは、おそらく最初は次のようになるでしょう:
void VoiceMemoWidget::onRecordingInitiated() { m_microphone->startRecording(); }
このアプリケーションが、マイクへのアクセスにユーザーの同意が必要なプラットフォームでも問題なく動作するようにするには、次のように拡張します:
voidVoiceMemoWidget::onRecordingInitiated() { 次のように拡張します。 QMicrophonePermissionmicrophonePermission;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アプリケーションに対してのみリクエストできます。
パーミッションの宣言
プラットフォームによっては、要求するパーミッションをビルド時に前もって宣言する必要があります。
アップルのプラットフォーム
要求する各パーミッションは、アプリケーションの Info.plist
ファイルに、アプリケーションがなぜそのパーミッションにアクセスする必要があるのかを記述した、いわゆる使用説明文字列を添付しなければなりません。例えば
<key>NSMicrophoneUsageDescription</key> <string>The microphone is used to record voice memos.</string>
関連する使用説明のキーは、各パーミッションタイプのドキュメントに記述されています。
関連するパーミッションバックエンドがアプリケーションに含まれていることを確認するために、ビルドシステムにカスタムInfo.plist
を指定してください。
アンドロイド
あなたが要求する各パーミッションは、アプリケーションのAndroidManifest.xml
ファイルにuses-permission
エントリを添付する必要があります。例えば
<manifest ...> <uses-permission android:name="android.permission.RECORD_AUDIO"/> </manifest>
関連するパーミッションバックエンドがアプリケーションに含まれていることを確認するには、ビルドシステムにカスタムAndroidManifest.xml
を指定するか、qt_add_android_permission() を使用してください。
関連するパーミッション名は、各パーミッションのドキュメントに記載されています。
利用可能なパーミッション
以下のパーミッション・タイプが利用可能です:
Bluetooth周辺機器へのアクセス | |
ユーザーのカレンダーへのアクセス | |
写真やビデオを撮影するためのカメラへのアクセス | |
ユーザーの連絡先へのアクセス | |
位置情報へのアクセス | |
音声のモニタリングや録音のためのマイクへのアクセス |
ベストプラクティス
エンドユーザーに可能な限り最高のユーザーエクスペリエンスを提供するために、アプリケーションのアクセス許可を管理するための以下のベストプラクティスを採用することをお勧めします:
- 必要最小限のパーミッションを要求する。例えば、マイクへのアクセスのみが必要な場合、念のためカメラへのアクセス許可は要求しないでください。パーミッションの範囲をさらに制限するには、個々のパーミッション・タイプのプロパティを使用します。例えば、QContactsPermission::setAccessMode()は読み取り専用アクセスを要求します。
- ユーザーによる特定のアクションに応じてパーミッションを要求する。例えば、ユーザーが音声を録音するボタンを押すまで、マイクのパーミッションのリクエストを延期する。パーミッションのリクエストを特定のアクションに関連付けることで、なぜパーミッションが必要なのか、ユーザーに明確なコンテキストを与えます。起動時に必要なすべての許可を要求しないでください。
- 必要であれば、追加のコンテキストと説明を提示します。ユーザーによるアクションだけでは十分なコンテキストにならないことがあります。ユーザーがアクションを開始した後、パーミッションを要求する前に説明ダイアログを表示することを検討してください。
- なぜパーミッションが必要なのかについて、透明で明確にしてください。説明ダイアログと使用法の説明において、アプリケーションが特定の機能を提供するために、なぜ特定のパーミッションが必要なのかを透明にしてください。
- 拒否されたパーミッションについて説明すること。あなたが要求するパーミッションは、様々な理由で拒否されるかもしれません。アプリケーションのエクスペリエンスを潔く低下させ、ユーザに状況について明確な説明を提示することで、この状況を常に考慮しなければなりません。
- 決してライブラリにパーミッションを要求してはいけません。パーミッションのリクエストは、上記の点について適切な判断を下すために必要な情報が利用可能な、可能な限りユーザの近くで行われるべきです。しかし、もしパーミッションが未確定であったり、拒否された場合は、ライブラリのAPIを通してそのことを反映させ、アプリケーションが必要なパーミッションをリクエストできるようにする必要があります。
Information Property List FilesおよびQt Creator:Editing Manifest Filesも参照のこと 。
© 2025 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.