Android 用 Intune App SDK - アプリ参加機能

Android 用 Microsoft Intune App SDK を使用すると、Intune アプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) をネイティブの Java/Kotlin Android アプリに組み込むことができます。 Intune で管理されるアプリケーションは、Intune App SDK と統合されたアプリケーションです。 Intune 管理者は、Intune がアプリをアクティブに管理するときに、Intune で管理されるアプリにアプリ保護ポリシーを簡単に展開できます。

注:

このガイドは、いくつかの異なるステージに分かれています。 まず、「統合の 計画」を確認します。

ステージ 7: アプリ参加機能

ステージ Goals

  • Intune App SDK によって提供されるさまざまなアプリ参加機能について説明します。
  • アプリとユーザーに関連するアプリ参加機能を統合します。
  • これらの機能の統合をテストします。

"アプリ参加機能" とは

この SDK 統合プロセスは、開発者が記述する必要があるアプリ固有のコードの量を最小限に抑えようとします。 SDK 統合の前の段階を正常に完了することで、アプリは、ファイルの暗号化、コピー/貼り付けの制限、スクリーンショットのブロック、データ転送の制限など、アプリ保護ポリシー設定の大部分を適用できるようになりました。

ただし、アプリ固有のコードを適切に適用する必要がある設定がいくつかあります。これらは、アプリ参加機能と呼ばれます。 通常、SDK には、アプリケーションのコードやエンド ユーザーシナリオに関する十分なコンテキストがないため、これらの設定を自動的に適用するため、開発者は SDK API を適切に呼び出します。

アプリ参加機能は必ずしも省略可能ではありません。 アプリの既存の機能によっては、これらの機能が必要になる場合があります。 詳細については、「 SDK 統合に関する重要な決定事項 」を参照してください。

このガイドの前の段階では、いくつかのアプリ参加機能について既に説明しています。

このガイドの残りの部分では、アプリ参加機能の残りのセットについて説明します。

  • ローカルストレージまたはクラウドストレージからファイルを保存/開くポリシーを適用します。
  • 通知のコンテンツを制限するポリシーを適用します。
  • バックアップ データを保護するポリシーを適用します。
  • 画面キャプチャを制限するポリシーを適用します (アプリにカスタム画面キャプチャ コードがある場合)。
  • App Protection CA をサポートします。
  • SDK からの通知に登録します。
  • カスタム アプリケーションのテーマを適用します。
  • Intune からの信頼された証明書を使用して、オンプレミス エンドポイントへの信頼のチェーンを確保します。

アプリ参加機能の基本

AppPolicy インターフェイスには、特定のアクションが許可されているかどうかをアプリに通知する多くのメソッドが含まれています。

ほとんどのアプリ参加機能には次が含まれます。

  • アクションが許可されているかどうかをチェックするアプリのコード内の適切な場所を特定する。
  • AppPolicy現在構成されているポリシーに基づいて、アクションが許可されているかどうかをチェックするメソッドを呼び出します。
  • 結果に応じて、アクションの完了を許可するか、アクションがブロックされたときにアプリの動作を変更します。

インスタンスをAppPolicy取得するには、 または getPolicyForIdentity(final String identity)などの getPolicyMAMPolicyManager メソッドのいずれかを使用します。

AppPolicy の情報メソッド

のすべての AppPolicy メソッドがアプリ参加機能に関連付けられているわけではありません。 一部のメソッドは情報に基づくものであり、ポリシーが SDK によって自動的に適用されている場合でも、ポリシーが現在構成されているアプリ データを提供します。 これらのメソッドは、特定のポリシーが構成されたときにカスタム ユーザー エクスペリエンスを表示する機会をアプリに提供するために存在します。

例: スクリーンショットがブロックされているかどうかを判断する

アプリにスクリーンショットを取得できるコントロールがある場合は、アプリ保護ポリシーでスクリーンショットがブロックされているかどうかをそのコントロールを無効または非表示にすることができます。

アプリで を呼び出MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()すことで、これをチェックできます。

アプリとデバイスまたはクラウドストレージの場所間のデータ転送を制限するためのポリシー

多くのアプリでは、エンド ユーザーがローカル ファイル ストレージまたはクラウド ストレージ サービスにデータを保存したり、ローカル ファイル ストレージ サービスからデータを開いたりすることができます。 Intune App SDK を使用すると、IT 管理者は、アプリがデータを保存してデータを開く場所を制限することで、データのイングレスやデータ漏洩から保護できます。

注:

アプリで個人またはクラウドの場所への直接の保存が許可されている場合 、または データをアプリに直接開くことを許可する場合は、IT 管理者がこの保存/開きをブロックできるように、この Intune App SDK アプリ参加機能を実装する必要があります

デバイスまたはクラウド ストレージへの保存

getIsSaveToLocationAllowed API を使用すると、構成されたポリシーに基づいて、特定の ID に対して特定の場所への保存が許可されているかどうかをアプリで認識できます。

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(
SaveLocation service, String username);

アプリがチェックをgetIsSaveToLocationAllowed実装する必要があるかどうかを判断するには、次の表を確認して、アプリがデータエグレスをサポートしているかどうかを判断します。

service パラメーター: SaveLocation 列挙値 使用例 関連付けられたユーザー名
ONEDRIVE_FOR_BUSINESS アプリは OneDrive にデータを保存しています。 usernameクラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
SHAREPOINT アプリは Sharepoint にデータを保存しています。 usernameクラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
BOX このアプリは Box にデータを保存しています。 usernameクラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
LOCAL アプリは、アプリのプライベート ストレージ ではない デバイス上の外部ストレージの場所にデータを保存しています。 外部ストレージはクラウド サービスとは見なされないため、常に username パラメーターと共に null 使用する必要があります。
PHOTO_LIBRARY アプリは、Androidのローカル写真ストレージにデータを保存しています。 Android ローカル写真ストレージはクラウド サービスとは見なされないため、常に username パラメーターで null 使用する必要があります。
ACCOUNT_DOCUMENT アプリは、アプリ内のアカウントに関連付けられている場所にデータを保存しており、上記で指定した特定のクラウドの場所の 1 つではありません。 *この場所は、マルチ ID アプリ内のアカウント間でデータを渡すことができるかどうかを判断するために使用する必要があります。 username Microsoft Entra認証に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
OTHER アプリは、上記で指定されておらず、 の条件 ACCOUNT_DOCUMENTを満たしていない場所にデータを保存しています。 usernameは、この場所に対して評価されないため、 であるnull必要があります。

アプリの操作に必要なプライベート アプリ ストレージに配置されたファイル、または表示のために一時的にダウンロードされたファイルは常に許可されます。をチェックgetIsSaveToLocationAllowedする必要はありません。 のチェックSaveLocation.LOCALを行う

  1. プライベート アプリ ストレージの外部に保存されたファイル。
  2. アプリ操作に必要ないプライベート アプリ ストレージにダウンロードされたファイル (たとえば、ユーザーが意図的にデバイスにダウンロードすることを選択した場合など)。

注:

保存ポリシーを確認する場合は、 username保存先 のクラウド サービスに関連付けられている UPN/username/電子メールである必要があります (必ずしも、保存するドキュメントを所有するアカウントと同じではありません )。

ローカルまたはクラウドのストレージの場所からデータを開く

getIsOpenFromLocationAllowed API を使用すると、構成されたポリシーに基づいて、特定の場所からのオープンが特定の ID に対して許可されているかどうかをアプリで認識できます。

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowed(
OpenLocation location, String username);

アプリがチェックをgetIsOpenFromLocationAllowed実装する必要があるかどうかを判断するには、次の表を確認して、アプリがデータイングレスをサポートしているかどうかを判断します。

location パラメーター: OpenLocation 列挙値 使用例 関連付けられたユーザー名
ONEDRIVE_FOR_BUSINESS アプリが OneDrive からデータを開いています。 usernameクラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
SHAREPOINT アプリが Sharepoint からデータを開いています。 usernameクラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
CAMERA アプリがカメラからデータを開いています。 nullデバイス カメラがクラウド サービスではないので、値。
LOCAL アプリは、アプリのプライベート ストレージ ではない デバイス上の外部ストレージの場所からデータを開いています。 外部ストレージはクラウド サービスの場所ではありませんが、所有権を username 示すパラメーターが必要です。
ローカル ストレージからファイルを開くとき、ファイル所有者は常に考慮する必要があります。ファイル所有者の名前付き保存ポリシーでは、他の ID によるファイルの開き方が許可される場合と許可されない場合があるためです。
- ID タグ付きファイルの場合は、username は、ファイル所有者の ID である必要があります。
- ID タグのないファイルの場合は、username は である null必要があります。
PHOTO_LIBRARY アプリは、Android 写真のローカル ストレージからデータを開いています。 Android ローカル写真ストレージはクラウド サービスとは見なされないため、常に username パラメーターで null 使用する必要があります。
ACCOUNT_DOCUMENT アプリは、アプリ内のアカウントに関連付けられている場所からデータを開き、上記で指定した特定のクラウドの場所の 1 つではありません。 *この場所は、マルチ ID アプリ内のアカウント間でデータを渡すことができるかどうかを判断するために使用する必要があります。 username Microsoft Entra認証に使用されるアカウントの 。 このようなユーザー名が存在しない場合、またはユーザー名が不明な場合は、 を使用します null
OTHER アプリは、上記で指定されておらず、 の条件 ACCOUNT_DOCUMENTを満たしていない場所からデータを開いています。 usernameは、この場所に対して評価されないため、 であるnull必要があります。

注:

開いているポリシーを確認する場合は、 username 開いているファイルまたはクラウド サービスに関連付 けられている UPN/username/電子メールである必要があります (ドキュメントを開いているアカウントと必ずしも同じではありません )。

ヒント

便宜上、SDK は、ローカル ストレージ内のファイルのパラメーターをFile受け取るメソッドAppPolicy.isOpenFromLocalStorageAllowedを提供します。 ポリシーの適用に関する用語であり、呼び出し AppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username) と機能的に同じですが、 からファイル所有者の username 解析を処理する点が File異なっています。

[ブロックされた共有] ダイアログ

SDK には、MAM ポリシーによってデータ転送アクションがブロックされたことをユーザーに通知するダイアログが用意されています。

または isOpenFromAllowedForLocation API 呼び出しによって保存/開くアクションがブロックされるたびにisSaveToAllowedForLocation、ダイアログがユーザーに表示されます。 ダイアログには汎用メッセージが表示され、無視されると呼び出し元 Activity に戻ります。

ダイアログを表示するには、次のコードを追加します。

MAMUIHelper.showSharingBlockedDialog(currentActivity)

ファイル共有を許可する

パブリック ストレージの場所への保存が許可されていない場合でも、アプリはユーザーが ファイルをアプリプライベート ストレージ にダウンロードし、システム選択ツールで開くことによってファイルを表示できるようにする必要があります。

通知内のコンテンツを制限するためのポリシー

単一 ID アプリの場合、Intune App SDK の既定の動作では、App Protection Policy が通知を制限すると 、すべての 通知がブロックされます。

SDK の既定の動作は制限されています。 SDK では、通知から管理されたコンテンツのみを削除することを目的とした "組織データのブロック" 値を自動的に適用することはできません。 マルチ ID アプリの場合、SDK では、マネージド コンテンツを含む通知を特定できません。

アプリに通知が表示され、マルチ ID または "組織データのブロック" 値を適用する場合は、通知を表示する前に、通知に関連付けられているアカウントの通知制限ポリシーをチェックする必要があります。

ポリシーが適用されているかどうかを判断するには、次の呼び出しを行います。

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

返される NotificationRestriction 列挙型の値は次のとおりです。

NotificationRestriction Enum 予想されるアプリの動作
BLOCKED アプリは、このポリシーに関連付けられているアカウントの通知を表示 してはなりませんシングル ID アプリの場合、Intune App SDK はすべての通知を自動的にブロックし、追加のコードは必要ありません。
BLOCK_ORG_DATA アプリには、organization データを含まない変更された通知が表示される必要があります。
UNRESTRICTED アプリはすべての通知を表示する必要があります。

アプリが正しく呼び出 getNotificationRestrictionされない場合、MAM SDK は 、シングル ID アプリに対してのみ通知を自動的に制限するためのベスト エフォートを行います。

この場合、 BLOCK_ORG_DATA は と同じように BLOCKED 扱われ、通知はまったく表示されません。

きめ細かい制御を行う場合は、 のgetNotificationRestriction値をチェックし、アプリ通知を適切に変更します。

バックアップ データを保護するためのポリシー

Intune App SDK では、Android の組み込みのバックアップと復元機能へのデータアップロードをブロックできます。 Android でのバックアップと復元の詳細については、「 Android API ガイド 」と「Android S/ 12 で導入された変更: バックアップと復元への変更」を参照してください。

アプリの自動バックアップ

Android M 以降、Android では、アプリのターゲット API に関係なく、Google Drive for Apps への 自動完全バックアップ の提供が開始されました。

Intune では、データ保護を確実に適用するための特定の Intune 統合ガイダンスを使用して、XML でカスタム ルールを定義する機能など、Android から利用できるすべての自動バックアップ機能を利用できます。

アプリのマニフェストでのバックアップ動作の構成

既定では、 android:allowBackupバックアップの有効化と無効化に関するページで説明されているように、true に設定されています。

アプリで完全バックアップと復元機能が必要ない場合は、false に設定android:allowBackupしますこの場合、これ以上のアクションは必要なく、"企業" データはアプリ内に残ります。

アプリで完全バックアップと復元機能が必要な場合は、true に設定android:allowBackupし、次の追加手順を実行します。

  1. アプリで独自のカスタムBackupAgentを使用しない場合は、既定の MAMBackupAgent を使用して、Intune ポリシーに準拠した自動完全バックアップを許可します。 アプリ マニフェストに次を配置します。

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [省略可能]オプションのカスタム BackupAgentを実装した場合は、MAMBackupAgent または MAMBackupAgentHelper を必ず使用する必要があります。 次のセクションを参照してください。 手順 1 で説明されている Intune の MAMDefaultBackupAgent の使用に切り替えることを検討してください。これは、Android M 以降で簡単にバックアップできます。

  3. アプリで受け取る完全バックアップの種類 (フィルターなし、フィルター処理なし、またはなし) を決定する場合は、属性 android:fullBackupContent を true、false、またはアプリ内の XML リソースに設定する必要があります。

  4. 次に、 のandroid:fullBackupContent値をメタデータ タグにコピーcom.microsoft.intune.mam.FullBackupContentし、API 31 で追加された新しい XML 構成形式をサポートするアプリの値をメタデータ タグにコピーするcom.microsoft.intune.mam.DataExtractionRules必要があります

    • 例 1: アプリで完全バックアップを除外せずに作成する場合は、属性とメタデータ タグを true に設定する必要があります。

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • 例 2: アプリでカスタム BackupAgent を使用し、Intune ポリシーに準拠した完全な自動バックアップをオプトアウトする場合は、属性とメタデータ タグを false に設定する必要があります。

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • 例 3: XML ファイルで定義されているカスタム 規則に従ってアプリに完全バックアップを作成する場合は、属性とメタデータ タグを同じ XML リソースに設定します。

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

キー/値のバックアップ

[キー/値のバックアップ] オプションは、すべての API 8 以降で使用でき、アプリ データを Android Backup Service にアップロードします。 アプリあたりのデータ量は 5 MB に制限されています。 キー/値バックアップを使用する場合は、 BackupAgentHelper または BackupAgent を使用する必要があります。

BackupAgentHelper

BackupAgentHelper は、ネイティブ Android 機能と Intune MAM 統合 BackupAgentHelper の両方の点で BackupAgent よりも実装が簡単で、開発者はファイル全体と共有設定 FileBackupHelperSharedPreferencesBackupHelper を に登録できます。これにより、作成時に BackupAgentHelper に追加されます。 Intune MAM で BackupAgentHelper を使用するには、次の手順に従います。

  1. を使用してマルチ ID バックアップ BackupAgentHelperを利用するには、Android ガイドに従って BackupAgentHelper を拡張します

  2. クラスで、BackupAgentHelper、FileBackupHelper、SharedPreferencesBackupHelper と同等の MAM を拡張します。

Android クラス MAM に相当する
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

これらのガイドラインに従うと、マルチ ID のバックアップと復元が成功します。

BackupAgent

BackupAgent を使用すると、バックアップされるデータをより明確にすることができます。 開発者は実装に対してかなり責任を負うため、Intune からの適切なデータ保護を確保するためにさらに多くの手順が必要です。 ほとんどの作業が開発者にプッシュされるため、Intune の統合は少し複雑になります。

MAM を統合する:

  1. Key/Value Backup の Android ガイドと特に BackupAgent の拡張を慎重に読み、BackupAgent の実装が Android ガイドラインに従っていることを確認してください。

  2. クラスで MAMBackupAgent を拡張します。

マルチ ID バックアップ:

  1. バックアップを開始する前に、バックアップする予定のファイルまたはデータ バッファーが実際に IT 管理者によってマルチ ID シナリオでバックアップされることを許可されていることをチェックします。 MAMFileProtectionManagerMAMDataProtectionManager でを使用isBackupAllowedして、これを判断します。 ファイルまたはデータ バッファーのバックアップが許可されていない場合は、バックアップに含めてはいけません。

  2. バックアップ中のある時点で、手順 1 でチェックインしたファイルの ID をバックアップする場合は、データを抽出する予定のファイルを使用して を呼び出す backupMAMFileIdentity(BackupDataOutput data, File … files) 必要があります。 これにより、新しいバックアップ エンティティが自動的に作成され、 に BackupDataOutput 書き込まれます。 これらのエンティティは、復元時に自動的に使用されます。

複数 ID の復元: データ バックアップ ガイドでは、アプリケーションのデータを復元するための一般的なアルゴリズムを指定し、「 BackupAgent の拡張 」セクションのコード サンプルを提供します。 マルチ ID の復元を正常に行うには、このコード サンプルで提供されている一般的な構造に従い、次に特に注意する必要があります。

  1. * ループを while(data.readNextHeader())使用してバックアップ エンティティを通過する必要があります。

  2. で記述onBackupしたキーと一致しない場合data.getKey()は を呼び出すdata.skipEntityData()必要があります。 この手順を実行しないと、復元が成功しない可能性があります。

  3. * コンストラクトでバックアップ エンティティを使用している間は、自動的に書き込むエンティティが失われるので while(data.readNextHeader())、戻りは避けてください。

  • data 、復元時にアプリに渡される MAMBackupDataInput のローカル変数名です。

カスタム画面キャプチャの制限

Android WindowのレベルFLAG_SECURE制限をバイパスするカスタム画面キャプチャ機能がアプリに含まれている場合は、その機能へのフル アクセスを許可する前に、画面キャプチャ ポリシーをチェックする必要があります。 たとえば、アプリでカスタム レンダリング エンジンを使用して現在のビューを PNG ファイルにレンダリングする場合は、最初に をチェックAppPolicy.getIsScreenCaptureAllowed()する必要があります。

注:

アプリにカスタムまたはサード パーティの画面キャプチャ機能が含まれていない場合は、画面キャプチャを制限するアクションを実行する必要はありません。 画面キャプチャ ポリシーは、すべての MAM 統合アプリの Window レベルで自動的に適用されます。 OS または別のアプリがアプリで を Window キャプチャしようとすると、必要に応じてブロックされます。 たとえば、ユーザーが Android の組み込みのスクリーンショットや画面記録機能を介してアプリの画面をキャプチャしようとすると、アプリからの参加なしにキャプチャが自動的に制限されます。

App Protection CA のサポート

アプリ保護 CA (条件付きアクセス) は、アプリベースの CA とも呼ばれ、アプリケーションが Intune App Protection ポリシーによって管理されるまでリソースへのアクセスを制限します。 Microsoft Entra ID では、CA で保護されたリソースにアクセスするためのトークンを付与する前に、アプリを登録して APP によって管理するように要求することで、これを適用します。

注:

App Protection CA のサポートには、バージョン 1.0.0 以上の MSAL ライブラリが必要です。

MSAL に準拠していない処理

アカウントのトークンを取得する場合、MSAL ライブラリは、 を MsalIntuneAppProtectionPolicyRequiredException 返すかスローして、アプリ保護ポリシー管理に準拠していないかどうかを示します。 コンプライアンスの修復に使用するために、例外から追加のパラメーターを抽出できます ( 「MAMComplianceManager」を参照してください)。 修復が成功すると、アプリは MSAL を介してトークンの取得を再試行できます。

MAMComplianceManager

MAMComplianceManager インターフェイスは、ポリシーが必要なエラーが MSAL から受信されたときに使用されます。 アプリを準拠状態にするために呼び出す必要がある [remediateCompliance] メソッドが含まれています。 への参照は MAMComplianceManager 、次のように取得できます。

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

MAMComplianceManager返されるインスタンスは、 ではないことが保証されますnull

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

メソッドはremediateCompliance()、要求されたトークンを付与するために、Microsoft Entra ID の条件を満たすためにアプリを管理下に配置するために呼び出されます。 最初の 4 つのパラメーターは、MSAL AuthenticationCallback.onError() メソッドによって受け取られた例外から抽出できます (以下のコード サンプルを参照してください)。 最後のパラメーターはブール値であり、コンプライアンスの試行中に UX を表示するかどうかを制御します。

remediateCompliance では、この操作中にアプリがカスタマイズされた UX を表示する必要がないように、単純なブロック進行状況ダイアログが表示されます。 このダイアログは、コンプライアンス修復の進行中にのみ表示されます。最終的な結果は表示されません。 アプリは、コンプライアンス修復の試行の COMPLIANCE_STATUS 成功または失敗を処理するために、通知の受信者を登録できます。 詳細については、「 コンプライアンスの状態通知 」を参照してください。

remediateCompliance() は、コンプライアンスの確立の一環として MAM 登録を開始する可能性があります。 登録通知の通知レシーバーが登録されている場合、アプリは登録通知を受け取ることがあります。 登録された MAMServiceAuthenticationCallback アプリのメソッドは acquireToken() 、登録のトークンを取得するために呼び出されます。 acquireToken() は、アプリが独自のトークンを取得する前に呼び出されるため、トークンの取得が成功した後にアプリが実行するブックキーピングまたはアカウント作成タスクがまだ実行されていない可能性があります。 この場合、コールバックはトークンを取得できる必要があります。

から acquireToken()トークンを返できない場合、コンプライアンス修復の試行は失敗します。

要求されたリソースの有効なトークンを使用して後でを呼び出 updateToken した場合、コンプライアンスの修復は、指定されたトークンを使用して直ちに再試行されます。

注:

例外が受信される前MsalIntuneAppProtectionPolicyRequiredExceptionacquireToken()、ユーザーがブローカーをインストールしてデバイスを登録するように既にガイドされているため、サイレント トークンの取得は引き続き可能です。 これにより、ブローカーはキャッシュに有効な更新トークンを持ち、要求されたトークンのサイレント取得を成功させることができます。

メソッドで AuthenticationCallback.onError() ポリシーが必要なエラーを受け取り、 MAMComplianceManager を呼び出してエラーを処理するサンプルを次に示します。

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

コンプライアンスの状態通知

アプリが種類COMPLIANCE_STATUSMAMComplianceNotificationの通知に登録された場合、コンプライアンス修復の試行の最終的な状態をアプリに通知するために、 が送信されます。 登録の詳細については、「 SDK からの通知の 登録」を参照してください。

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

メソッドは getComplianceStatus() 、[MAMCAComplianceStatus] 列挙型の値としてコンプライアンス修復試行の結果を返します。

状態コード 説明
UNKNOWN 状態が不明です。 これは、予期しないエラーの理由を示している可能性があります。 追加情報は、ポータル サイトログにあります。
COMPLIANT コンプライアンスの修復が成功し、アプリがポリシーに準拠するようになりました。 MSAL トークンの取得を再試行する必要があります。
NOT_COMPLIANT コンプライアンスを修復できませんでした。 アプリは準拠していないため、エラー条件が修正されるまで MSAL トークンの取得を再試行しないでください。 追加のエラー情報は MAMComplianceNotification と共に送信されます。
SERVICE_FAILURE Intune サービスからコンプライアンス データを取得しようとしたときにエラーが発生しました。 追加情報は、ポータル サイトログにあります。
NETWORK_FAILURE Intune サービスへの接続中にエラーが発生しました。 ネットワーク接続が復元されたら、アプリでトークンの取得をもう一度試す必要があります。
CLIENT_ERROR クライアントに関連する何らかの理由で、コンプライアンスの修復が失敗しました。 たとえば、トークンや間違ったユーザーなどです。 追加のエラー情報は MAMComplianceNotification と共に送信されます。
PENDING 時間制限を超えたときに、状態応答がまだサービスから受信されていないため、コンプライアンスの修復が失敗しました。 アプリは、後でトークンの取得をもう一度試す必要があります。
COMPANY_PORTAL_REQUIRED コンプライアンスの修復を成功させるには、デバイスにポータル サイトをインストールする必要があります。 ポータル サイトが既にデバイスにインストールされている場合は、アプリを再起動する必要があります。 この場合、ユーザーにアプリの再起動を求めるダイアログが表示されます。

コンプライアンスの状態が の場合、アプリは MAMCAComplianceStatus.COMPLIANT元のトークンの取得 (独自のリソース) を再開する必要があります。

コンプライアンス修復の試行が失敗した場合、 メソッドと getComplianceErrorMessage() メソッドは、getComplianceErrorTitle()選択した場合にアプリがエンド ユーザーに表示できるローカライズされた文字列を返します。 ほとんどのエラー ケースはアプリによって修復されないため、一般的なケースでは、アカウントの作成またはログインに失敗し、ユーザーが後でやり直すことを許可することをお勧めします。

エラーが永続的な場合、ポータル サイト ログが原因の特定に役立つ場合があります。 エンド ユーザーはログを送信できます。 詳細については、「 アップロードと電子メール ログ」を参照してください。

MAMNotificationReceiver インターフェイスを実装するために匿名クラスを使用してレシーバーを登録する例を次に示します。

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
            
            // take appropriate action based on complianceNotification.getComplianceStatus()
            
            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

注:

通知が見逃される可能性のある競合状態を回避するには、呼び出す remediateCompliance() 前に通知レシーバーを登録する必要があります。

App Protection CA のサポートの宣言

アプリがアプリ CA の修復を処理する準備ができたら、アプリがアプリ CA の準備ができていることを Microsoft ID に伝えることができます。 MSAL アプリケーションでこれを行うには、"protapp" のクライアント機能を使用してパブリック クライアントを構築します

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

上記を完了したら、以下の App Protection CA の検証 に進みます。

実装に関する注意事項

注:

アプリのMAMServiceAuthenticationCallback.acquireToken()メソッドは、 にフラグの false をforceRefresh渡すacquireTokenSilentAsync()必要があります。

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

注:

修復の試行中にカスタム ブロック UX を表示する場合は、showUX パラメーターの false を に渡す remediateCompliance()必要があります。 を呼び出 remediateCompliance()す前に、まず UX を表示し、通知リスナーを登録する必要があります。 これにより、非常に迅速に失敗した場合 remediateCompliance() に通知が見逃される可能性がある競合状態が回避されます。 たとえば、 onCreate() Activity サブクラスの または onMAMCreate() メソッドは、通知リスナーを登録してから を呼び出 remediateCompliance()すのに最適な場所です。 の remediateCompliance() パラメーターは、意図の追加として UX に渡すことができます。 コンプライアンス状態通知を受信すると、結果を表示するか、単にアクティビティを完了できます。

注:

remediateCompliance() はアカウントを登録し、登録を試みます。 メイントークンが取得されると、呼び出しregisterAccountForMAM()は必要ありませんが、そうしても害はありません。 一方、アプリがトークンの取得に失敗し、ユーザー アカウントを削除する場合は、 を呼び出 unregisterAccountForMAM() してアカウントを削除し、バックグラウンド登録の再試行を防ぐ必要があります。

SDK からの通知に登録する

Intune App SDK ガイドでは、次のような SDK からの通知にアプリを登録する必要がある場合があるいくつかのシナリオについて既に説明しています。

このセクションでは、SDK が送信できるあらゆる種類の通知、アプリケーションでリッスンするタイミングと理由、および通知レシーバーを実装する方法について説明します。

通知の種類

すべての SDK 通知は、 MAMNotificationType 列挙型を返す 1 つの関数 getType()を持つ MAMNotification インターフェイスを実装します。

ほとんどの通知は MAMUserNotificationsであり、1 つの ID に固有の情報を提供します。これは、関数を getUserIdentity() 介して取得できます。

MAMEnrollmentNotificationMAMComplianceNotification をさらに拡張 MAMUserNotificationします。この結果には、ユーザー/デバイスを MAM サービスに登録しようとした結果と、App Protection CA のコンプライアンスを修復しようとした結果がそれぞれ含まれます。

通知の種類 通知クラス 通知の理由 適用対象 処理のヒント スレッド情報
COMPLIANCE_STATUS MAMComplianceNotification コンプライアンス修復の試行の結果を返します。 App Protection CA を実装するアプリでは、これを処理する必要があります。 - 非決定的
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification 登録試行の結果を返します。 すべてのアプリでこれを受け取ります。 - 非決定的
MANAGEMENT_REMOVED MAMUserNotification アプリが管理されようとしています。 利用 MAMDataProtectionManager するアプリはこれを処理する必要があります。 以下 のMANAGEMENT_REMOVED を参照してください。 UI スレッドでは使用しない
REFRESH_APP_CONFIG MAMUserNotification アプリの構成値が変更されている可能性があります。 アプリ構成を実装し、アプリ構成データをキャッシュするアプリでは、これを処理する必要があります。 アプリは、キャッシュされたアプリ構成データを無効にして更新する必要があります。 非決定的
REFRESH_POLICY MAMUserNotification ポリシーアプリ保護変更されている可能性があります。 アプリ保護ポリシーをキャッシュするアプリでは、これを処理する必要があります。 アプリは、キャッシュされたアプリ保護ポリシー データを無効にして更新する必要があります。 非決定的
WIPE_USER_DATA MAMUserNotification ワイプが発生しようとしています(*)。 を利用 MAMDataProtectionManager するアプリでは、 またはWIPE_USER_AUXILIARY_DATA を処理する必要があります。 「選択的ワイプ」を参照してください。 UI スレッドでは使用しない
WIPE_USER_AUXILIARY_DATA MAMUserNotification ワイプが発生しようとしています(*)。 これを受け取るのはマルチ ID アプリのみです。
を利用 MAMDataProtectionManager するアプリでは、 またはWIPE_USER_DATA を処理する必要があります。
「選択的ワイプ」を参照してください。 UI スレッドでは使用しない
WIPE_COMPLETED MAMUserNotification ワイプが完了しました。 常に省略可能。 または WIPE_USER_AUXILIARY_DATAの後にWIPE_USER_DATA配信されます。 *または のハンドラー WIPE_USER_DATAWIPE_USER_AUXILIARY_DATAからエラーが報告された場合、この通知は送信されません。- UI スレッドでは使用しない

(*)ワイプは、次のようなさまざまな理由で発生する可能性があります。

  • unregisterAccountForMAM というアプリ。
  • IT 管理者がリモート ワイプを開始しました。
  • 管理必要な条件付きアクセス ポリシーが満たされませんでした。

警告

アプリは、 と WIPE_USER_AUXILIARY_DATA 通知の両方にWIPE_USER_DATA登録しないでください。

MANAGEMENT_REMOVED

通知は MANAGEMENT_REMOVED 、以前にポリシーで管理されたアカウントが管理されようとしていることをアプリに通知します。 アカウントがアンマネージドになると、アプリは、そのアカウントの暗号化されたファイルを読み取ったり、暗号化されたアカウントのデータを読み取ったり、暗号化された MAMDataProtectionManagerクリップボードと対話したり、マネージド アプリ エコシステムに参加したりできなくなります。

これにより、ユーザー データのワイプやユーザーのサインアウトは必要ありません (ワイプが必要な場合は、 WIPE_USER_DATA 通知が送信されます)。 多くのアプリではこの通知を処理する必要がない場合がありますが、使用 MAMDataProtectionManager するアプリはこれを処理する必要があります。 詳細については、「 データ バッファー保護 」を参照してください。

SDK がアプリの MANAGEMENT_REMOVED レシーバーを呼び出すと、次のことが当てはまります。

  • SDK は、アプリに属する以前に暗号化されたファイル (ただし、保護されていないデータ バッファー) を既に暗号化解除しています。 アプリに直接属していない sdcard 上のパブリックな場所にあるファイル (ドキュメントやダウンロード フォルダーなど) は暗号化解除されません。

  • レシーバー メソッドによって作成された新しいファイルまたは保護されたデータ バッファー (またはレシーバーの起動後に実行されているその他のコード) は暗号化されません。

  • アプリは引き続き暗号化キーにアクセスできるため、データ バッファーの暗号化解除などの操作は成功します。

アプリのレシーバーが戻ると、暗号化キーにアクセスできなくなります。

MAMNotificationReceiver の実装

SDK からの通知に登録するには、アプリで MAMNotificationReceiver を作成し、MAMNotificationReceiverRegistry に登録 する必要があります。

受信側を登録するには、受信側とメソッドで目的の通知の種類をApplication.onCreate呼び出registerReceiverします。

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

アプリの MAMNotificationReceiver 実装には、 メソッドを onReceive(MAMNotification notification) 含める必要があります。 このメソッドは、受信した通知ごとに個別に呼び出され、 を boolean返す必要があります。 通常、アプリケーションで通知に応答するエラーが発生しない限り、このメソッドは常に を返す true必要があります。

他の種類の Android レシーバーと同様に、アプリケーションには通知を処理する柔軟性があります。

  • 個別の通知の種類に対して 個別の MAMNotificationReceiver 実装を作成できます (以下で説明します)。 この場合は、各実装と各通知の種類を個別に登録してください。
  • 複数の異なる通知の種類に応答するためのロジックを含む 1 つの MAMNotificationReceiver 実装を使用できます。 この場合、応答できる通知の種類ごとに登録する必要があります。
  • それぞれ同じ通知の種類に応答する複数の MAMNotificationReceiver 実装を作成できます。 この場合、両方とも同じ通知の種類に登録する必要があります。

ヒント

コールバックが UI スレッドで MAMNotificationReceiver.onReceive 実行されていないため、ブロックしても安全です。

カスタム テーマ

カスタム テーマは、Intune App SDK に提供できます。このカスタム テーマは、すべての SDK 画面とダイアログに適用されます。 テーマが指定されていない場合は、既定の SDK テーマが使用されます。

カスタム テーマの提供

テーマを指定するには、 メソッドに次のコード行を追加する Application.onMAMCreate 必要があります。

MAMThemeManager.setAppTheme(R.style.AppTheme);

上記の例では、SDK を適用するスタイル テーマに置き換える R.style.AppTheme 必要があります。

信頼されたルート証明書の管理

アプリケーションで、内部 Web サイトとアプリケーションへの安全なアクセスを提供するために、オンプレミスまたはプライベート証明機関によって発行された SSL/TLS 証明書が必要な場合、Intune App SDK は、 API クラス MAMTrustedRootCertsManagerMAMCertTrustWebViewClient を使用した証明書信頼管理のサポートを追加しました。

注:

MAMCertTrustWebViewClient では 、Android 10 以降がサポートされています。

信頼されたルート証明書管理では、次のサポートが提供されます。

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • Webview

要件

注:

信頼されたルート証明書管理は、Microsoft Tunnel VPN Gatewayとは別に使用できますが、使用するには Microsoft MAM Tunnel のライセンスを付与する必要があります。

Intune からの信頼されたルート証明書を使用したトラスト アンカーの確立

信頼されたルート証明書管理を使用すると、アプリで Intune からの信頼されたルート証明書をデバイスからの証明書と組み合わせて使用できます。

デバイスの信頼されたルート証明書ストアにオンプレミス リソースへの安全な接続を確立するために必要な信頼されたルート証明書が含まれていない場合、API クラス MAMTrustedRootCertsManagerMAMCertTrustWebViewClient は、App Configuration ポリシーを介して配信される Intune 信頼されたルート証明書をフォールバック オプションとして使用します。 これにより、アプリはデバイス証明書と Intune 証明書の両方を使用して、セキュリティで保護された接続と信頼されたソースとの通信を確認できます。

ネットワーク セキュリティ設定を強化するために、アプリはネットワーク セキュリティ構成 XML ファイルを使用できます。 信頼されたルート証明書管理は、アプリのネットワーク セキュリティ構成 XML に次のいずれかの機能があるかどうかを確認することで、この追加のセキュリティを尊重します。

  • 自己署名証明書などの追加の CA を含むカスタム信頼アンカー。
  • 信頼された CA を制限するためのドメイン固有の規則。
  • 特定のドメインの証明書のピン セット。

注:

Android ネットワーク セキュリティの構成の詳細については、「ネットワーク セキュリティの構成」を参照してください。

信頼が確認されているドメインに該当する場合、信頼されたルート証明書管理は、このドメインのカスタム信頼チェックをスキップし、プラットフォームの既定の信頼マネージャーのみがチェックを実行できるようにします。

MAMTrustedRootCertsManager クラス

このクラスには、次の API が用意されています。

  • createSSLContext(String identity, String protocol): 指定した SSLContext ID と指定した SSL/TLS プロトコルに対して信頼されたルート証明書を使用するオブジェクトを作成します。 このクラスから返された SSLContext オブジェクトは、デバイスと MAM サービスから結合された信頼されたルート証明書を使用するオブジェクトで X509TrustManager 既に正しく初期化されています。
  • createSSLSocketFactory(String identity, String protocol): 指定した SSLSocketFactory ID と指定した SSL/TLS プロトコルに対して信頼されたルート証明書を使用するオブジェクトを作成します。 返された SSLSocketFactory オブジェクトは、このクラスの同じ SSLContext オブジェクトから参照されます。
  • createX509TrustManagers(String identity): 指定した ID に X509TrustManager 対して、デバイスと MAM サービスから結合された信頼されたルート証明書を使用するオブジェクトの配列を作成します。

注:

パラメーターは identity 、UPN などのアプリケーションを実行している特定のユーザーの文字列識別子であると予想されます。 ユーザー識別子が事前に不明な場合は、null の値を渡すことができます。MAM は、これらの API が呼び出されたスレッドまたはプロセスから正しい ID を検出しようとします。 MAM が ID を検出するには、プロセスまたはスレッドで ID を正しく設定する必要があります。 プロセスまたはスレッドでアクティブ ID を設定する方法の詳細については、「ステージ 5: マルチ ID」を参照してください。

注:

パラメーターが protocol 指定されていない場合は、プラットフォームでサポートされている最も高い SSL/TLS プロトコルが使用されます。

このクラスの使用例を次に示します。

HttpsUrlConnection の使用例
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactory(identity, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
OkHttpClient の使用例
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagers(identity);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);  

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

MAMCertTrustWebViewClient クラス

このクラスは、 で SSL エラー android.net.http.SslError.SSL_UNTRUSTEDWebViewを処理する方法を提供する Android クラスandroid.webkit.WebViewClientのカスタム実装を提供します。 このエラーの処理では、クラスは Intune で構成され、MAM サービスから受信した信頼されたルート証明書を使用して、 で SSL エラーWebViewを生成したターゲット URL からホストの信頼性をチェックします。 カスタム実装で SSL エラーが処理されない場合は、スーパークラスから継承された既定の動作が呼び出されます。 このクラスを使用する場合は、そのクラスのインスタンスを作成し、 を呼び出 WebView.setWebViewClient(WebViewClient) してインスタンスに登録する WebView 必要があります。

このクラスの使用例を次に示します。

WebView の使用例
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

終了条件

テストを容易にするために、 ポリシーを変更して迅速にテスト する方法に関するページを参照してください。

制限への保存と制限からのオープンの検証

アプリとデバイスまたはクラウドストレージの場所間のデータ転送を制限するためのポリシーを実装していない場合はスキップします。

アプリがクラウド サービスまたはローカル データにデータを保存し、クラウド サービスまたはローカル データからデータを開くことができるすべてのシナリオで、自分を参照します。

わかりやすくするために、これらのテストでは、アプリ内の 1 つの場所から OneDrive for Business へのデータの保存と開き方のサポートのみがアプリに含まれているものとします。 ただし、すべての組み合わせを検証する必要があります。アプリでデータの保存が許可されているすべての場所に対してサポートされているすべての保存場所と、アプリでデータを開く場所に対してサポートされているすべての開いている場所を検証する必要があります。

これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 追加:

  • マネージド アカウントのポリシーを次のように設定します。
    • "組織データを他のアプリに送信する" を "ポリシー管理アプリ" に送信します。
    • "他のアプリからデータを受信する" から "ポリシー管理アプリ" に。
シナリオ 前提 条件 手順
に保存、完全に許可 "組織データのコピーを保存する" ポリシーが "許可" に設定されている - アプリがOneDrive for Businessにデータを保存できる場所に移動します。
- ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。
- 保存が許可されていることを確認します。
に保存し、除外する - "組織データのコピーを保存する" ポリシーが "ブロック" に設定されている
- "選択したサービスへのコピーの保存をユーザーに許可する" ポリシーが "OneDrive for Business" のみに設定されている
- アプリがOneDrive for Businessにデータを保存できる場所に移動します。
- ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。
- 保存が許可されていることを確認します。
- アプリで許可されている場合は、ファイルを別のクラウド ストレージの場所に保存し、ブロックされていることを確認します。
に保存し、ブロックする "組織データのコピーを保存する" ポリシーが "ブロック" に設定されている - アプリがOneDrive for Businessにデータを保存できる場所に移動します。
- ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。
- 保存がブロックされていることを確認します。
- アプリで許可されている場合は、ファイルを別のクラウド ストレージの場所に保存し、ブロックされていることを確認します。
から開き、完全に許可 "組織ドキュメントにデータを開く" ポリシーが "許可" に設定されている - アプリがOneDrive for Businessからデータを開くことができる場所に移動します。
- アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。
- オープンが許可されていることを確認します。
から開く、除外する - "組織ドキュメントにデータを開く" ポリシーが "ブロック" に設定されている
- "ユーザーが選択したサービスからデータを開くことを許可する" ポリシーが "OneDrive for Business" のみに設定されている
- アプリがOneDrive for Businessからデータを開くことができる場所に移動します。
- アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。
- オープンが許可されていることを確認します。
- アプリで許可されている場合は、別のクラウド ストレージの場所から別のファイルを開き、ブロックされていることを確認します。
から開く、ブロックする "組織ドキュメントにデータを開く" ポリシーが "ブロック" に設定されている - アプリがOneDrive for Businessからデータを開くことができる場所に移動します。
- アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。
- 開いているがブロックされていることを確認します。
- アプリで許可されている場合は、別のクラウド ストレージの場所から別のファイルを開き、ブロックされていることを確認します。

通知の制限の検証

通知内のコンテンツを制限するためのポリシーを実装していない場合はスキップします。

App Protection Policy に関する限り、アプリケーションで次の 3 種類の通知が発生する可能性があります。

  1. アカウント データを含まない通知。
  2. マネージド アカウントに属するデータを含む通知。
  3. アンマネージド アカウントに属するデータを含む通知。

アプリケーションが単一 ID の場合、唯一のアカウントが管理されていない場合は保護が適用されないので、最初の 2 つだけが関連します。

通知の制限は、異なるポリシー値が構成された 3 種類の通知をすべてトリガーすることで検証できます。

これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 アプリがマルチ ID の場合は、アンマネージド アカウントを使用してアプリにもログインします。

シナリオ 前提 条件 手順
完全なコンテンツがブロックされました "組織データ通知" ポリシーが "ブロック" に設定されている - アカウント データなしで通知を起動するようにアプリをトリガーします。
- この通知にコンテンツが表示されないようにします。
- アプリをトリガーして、マネージド アカウントのデータを使用して通知を起動します。
- この通知にコンテンツが表示されないようにします。
- アプリをトリガーして、アンマネージド アカウントのデータで通知を起動します。
- この通知にコンテンツが表示されないようにします。
部分的なコンテンツのブロック "組織データ通知" ポリシーが "組織データのブロック" に設定されている - アカウント データなしで通知を起動するようにアプリをトリガーします。
- この通知に完全なコンテンツが表示されていることを確認します。
- アプリをトリガーして、マネージド アカウントのデータを使用して通知を起動します。
- この通知によってマネージド アカウントのコンテンツが編集されていることを確認します。
- アプリをトリガーして、アンマネージド アカウントのデータで通知を起動します。
- この通知に完全なコンテンツが表示されていることを確認します。
コンテンツがブロックされていない "組織データ通知" ポリシーが "許可" に設定されている

データのバックアップと復元の検証

バックアップ データを保護するためのポリシーを実装していない場合はスキップします。

アプリがバックアップ用に構成したコンテンツ (ファイルやキーと値のペア) について理解し直してください。 予期されるコンテンツ のみが 復元の一部であることを検証する必要があります。 復元に余分なコンテンツが含まれると、データ リークが発生する可能性があります。

これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 アプリがマルチ ID の場合は、アンマネージド アカウントを使用してアプリにもログインします。

バックアップをテストするには、Android の公式の指示に従ってください。 これらの手順は、自動バックアップとキー/値のバックアップでは異なるため、密接に従ってください。

ポリシーに対するカスタム画面キャプチャの検証

カスタム画面キャプチャの制限を実装していない場合はスキップします。

アプリケーションに Android Windowレベル FLAG_SECUREをバイパスする機能がある場合は、この機能がアプリ保護ポリシーの画面キャプチャ制限によってブロックされていることを検証します。

これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。

シナリオ 前提 条件 手順
スクリーン キャプチャがブロックされました "スクリーン キャプチャと Google アシスタント" ポリシーが "ブロック" に設定されている - カスタム FLAG_SECURE コードを利用するアプリ内の場所に移動します。
- その機能の利用を試みます。
- 機能がブロックされていることを確認します。
許可された画面キャプチャ "スクリーン キャプチャと Google アシスタント" ポリシーが "許可" に設定されている - カスタム FLAG_SECURE コードを利用するアプリ内の場所に移動します。
- その機能の利用を試みます。
- 機能が許可されていることを確認します。

App Protection CA の検証

サポート アプリ保護 CA を実装していない場合はスキップします。

アプリ保護ポリシーを作成してアプリとテスト アカウントに割り当てる一般的な検証手順に加えて、アプリ保護条件付きアクセス ポリシーを作成してテスト アカウントに割り当てる必要もあります。 詳細については、「 Intune でアプリベースの条件付きアクセス ポリシーを設定する 」を参照してください。

テスト手順:

  1. このテストを開始する前に、Microsoft Authenticator をアンインストールしてIntune ポータル サイトします。
  2. アプリをインストールします。
  3. アプリ保護ポリシーとアプリ ベースの CA ポリシーの両方を対象とするテスト アカウントでアプリにログインします。
  4. アプリでポータル サイトのインストールを求めるメッセージが表示されていることを確認します。
  5. もう一度ログインします。
  6. デバイスの登録を求めるメッセージが表示されていることを確認します。 プロンプトに従います。 ここで登録を求めるメッセージが表示されない場合は、テスト デバイスが他の SDK 対応アプリ、ポータル サイト、Authenticator を最初にアンインストールしたことを確認します。 それでもプロンプトが表示されない場合は、上記の実装手順を見直してください。
  7. 登録後にすべてのアプリ データにアクセスできることを確認します。

通知レシーバーの検証

SDK からの通知の登録を実装していない場合はスキップします。

検証手順は、アプリが登録した通知の種類によって異なります。 すべての種類の通知に対してログ記録を追加して、受信者が適切に呼び出されていることを確認します。

MAM_ENROLLMENT_RESULT は、アプリ保護ポリシーを対象とするアカウントを使用してアプリケーションに最初にログインするだけでトリガーできます。

REFRESH_APP_CONFIGREFRESH_POLICY は、テスト アカウントを対象とするそれぞれのApp Configuration ポリシーとアプリ保護ポリシーを更新し、SDK が更新されたポリシーを受け取るのを待機することでトリガーできます。

ヒント

このプロセスを高速化するには、「 ポリシーの変更による迅速なテスト 」を参照してください。

MANAGEMENT_REMOVEDWIPE_USER_DATAWIPE_USER_AUXILIARY_DATAWIPE_COMPLETED通知はすべて、Microsoft Intuneから選択的ワイプを発行することでトリガーできます。

カスタム テーマの検証

カスタム テーマを実装していない場合はスキップします。

カスタム テーマのサポートは、SDK のダイアログで色を調べることで検証できます。 チェックする最も簡単なダイアログは、MAM PIN 画面です。

前提 条件:

  • マネージド アカウントのポリシーを次のように設定します。
    • "アクセスの PIN" を "必須" に設定します。
  • アプリとIntune ポータル サイトをインストールします。

テスト手順:

  1. アプリケーションを起動し、テスト アカウントでログインします。
  2. MAM PIN 画面が表示され、SDK に指定したカスタム テーマに基づいてテーマが設定されていることを確認します。

次の手順

このガイドに従い、上記のすべての終了条件を完了した場合は、アプリが Intune App SDK と完全に統合され、アプリ保護ポリシーを適用できるようになりました。 前のアプリ参加セクション (ステージ 5: マルチ IDステージ 6: App Configuration) のいずれかをスキップし、アプリでこれらの機能をサポートする必要があるかどうかわからない場合は、SDK 統合の主要な決定事項に関するページを参照してください。

アプリ保護は、アプリのコア シナリオになりました。 アプリの開発を続ける場合は、このガイドと 付録 を引き続き参照してください。