アプリケーションの許可

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

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アプリケーションに対してのみリクエストできます。

パーミッションの宣言

プラットフォームによっては、要求するパーミッションをビルド時に前もって宣言する必要があります。

アップルのプラットフォーム

要求する各パーミッションは、アプリケーションの 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>

関連するパーミッション名は、それぞれのパーミッション・タイプのドキュメントに記述されています。

利用可能なパーミッション

以下のパーミッション・タイプが利用可能です:

QBluetoothPermission

Bluetooth周辺機器へのアクセス

QCalendarPermission

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

QCameraPermission

写真やビデオを撮影するためのカメラへのアクセス

QContactsPermission

ユーザーの連絡先へのアクセス

QLocationPermission

位置情報へのアクセス

QMicrophonePermission

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

ベストプラクティス

エンドユーザーに可能な限り最高のユーザーエクスペリエンスを提供するために、アプリケーションのアクセス許可を管理するための以下のベストプラクティスを採用することをお勧めします:

  • 必要最小限のパーミッションを要求する。例えば、マイクへのアクセスのみが必要な場合、念のためカメラへのアクセス許可は要求しないでください。パーミッションの範囲をさらに制限するには、個々のパーミッション・タイプのプロパティを使用します。例えば、QContactsPermission::setAccessMode()は読み取り専用アクセスを要求します。
  • ユーザーによる特定のアクションに応じてパーミッションを要求する。例えば、ユーザーが音声を録音するボタンを押すまで、マイクのパーミッションのリクエストを延期する。パーミッションのリクエストを特定のアクションに関連付けることで、なぜパーミッションが必要なのか、ユーザーに明確なコンテキストを与えます。起動時に必要なすべての許可を要求しないでください。
  • 必要であれば、追加のコンテキストと説明を提示します。ユーザーによるアクションだけでは十分なコンテキストにならないことがあります。ユーザーがアクションを開始した後、パーミッションを要求する前に説明ダイアログを表示することを検討してください。
  • なぜパーミッションが必要なのかについて、透明で明確にしてください。説明ダイアログと使用法の説明において、アプリケーションが特定の機能を提供するために、なぜ特定のパーミッションが必要なのかを透明にしてください。
  • 拒否されたパーミッションについて説明すること。あなたが要求するパーミッションは、様々な理由で拒否されるかもしれません。アプリケーションのエクスペリエンスを潔く低下させ、ユーザに状況について明確な説明を提示することで、常にこの状況を考慮しなければなりません。
  • 決してライブラリからパーミッションを要求してはいけません。パーミッションのリクエストは、上記の点について適切な判断を下すために必要な情報が利用可能な、可能な限りユーザの近くで行われるべきです。しかし、もしパーミッションが未確定であったり、拒否された場合は、ライブラリのAPIを通してそのことを反映させ、アプリケーションが必要なパーミッションをリクエストできるようにする必要があります。

Information Property List FilesおよびQt Creatorも参照してください: マニフェストファイルの編集」も参照してください。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。