Microsoft Intune App SDK for Android 開発者ガイド
Android 用 Microsoft Intune App SDK を使用すると、Intune アプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) をネイティブの Java/Kotlin Android アプリに組み込むことができます。 Intune で管理されるアプリケーションは、Intune App SDK と統合されたアプリケーションです。 Intune 管理者は、Intune がアプリをアクティブに管理するときに、Intune で管理されるアプリにアプリ保護ポリシーを簡単に展開できます。
重要
Intune では、 Intune App SDK の更新プログラムが定期的にリリースされます。 更新プログラムをソフトウェア開発リリース サイクルに組み込み、アプリが最新の App Protection ポリシー設定を確実にサポートできるように、更新プログラムについては Intune App SDK リポジトリをサブスクライブすることをお勧めします。
OS の更新によって重大な変更が発生する可能性があるため、すべての主要な OS リリースの前に必須の Intune App SDK 更新プログラムを実行して、アプリがスムーズに実行されるように計画します。 メジャー OS リリースの前に最新バージョンに更新しない場合は、重大な変更が発生したり、アプリにアプリ保護ポリシーを適用できなかったりするリスクが発生する可能性があります。
プロセス フロー
次の図は、Intune App SDK for Android プロセス フローを示しています。
ステージ Goals
このガイドには、Intune App SDK のアーキテクチャ、一般的でない統合手順に関する情報、およびその他の役立つコンテンツの詳細が記載されています。
詳細の SDK
クラスとメソッドの置換
ビルド ツールを通じて、Intune App SDK は Android 開発者の統合の負担を最小限に抑えようとします。 ビルド ツールの前に、開発者はすべての置換を手動で実行する必要があります。
注:
アプリは SDK ビルド ツールと統合する必要があります。これにより、これらの置換がすべて自動的に実行されます。
Android 基本クラスは、Intune 管理を有効にするために、対応する MAM に置き換えられます。
SDK クラスは、Android 基本クラスとそのクラスのアプリ独自の派生バージョンの間に存在します。
たとえば、アプリ アクティビティは、次のような継承階層で終わる可能性があります。 AppSpecificActivity
拡張 MAMActivity
は Activity
です。
MAM レイヤーは、アプリにマネージド ビューをシームレスに提供するために、システム操作の呼び出しをフィルター処理します。
基底クラスに加えて、(例: MediaPlayer
) から派生せずにアプリが使用するクラスには、MAM に相当するものも必要であり、 一部のメソッド呼び出しも置き換える必要があります。
次の表に、MAM の置換の多くを示します。
Android 基本クラス | Intune App SDK の置き換え |
---|---|
android.app.Activity | MAMActivity |
android.app.ActivityGroup | MAMActivityGroup |
android.app.AliasActivity | MAMAliasActivity |
android.app.Application | MAMApplication |
android.app.Dialog | MAMDialog |
android.app.AlertDialog.Builder | MAMAlertDialogBuilder |
android.app.DialogFragment | MAMDialogFragment |
android.app.ExpandableListActivity | MAMExpandableListActivity |
android.app.Fragment | MAMFragment |
android.app.IntentService | MAMIntentService |
android.app.LauncherActivity | MAMLauncherActivity |
android.app.ListActivity | MAMListActivity |
android.app.ListFragment | MAMListFragment |
android.app.NativeActivity | MAMNativeActivity |
android.app.PendingIntent | MAMPendingIntent |
android.app.Service | MAMService |
android.app.TabActivity | MAMTabActivity |
android.app.TaskStackBuilder | MAMTaskStackBuilder |
android.app.backup.BackupAgent | MAMBackupAgent |
android.app.backup.BackupAgentHelper | MAMBackupAgentHelper |
android.app.backup.FileBackupHelper | MAMFileBackupHelper |
android.app.backup.SharePreferencesBackupHelper | MAMSharedPreferencesBackupHelper |
android.app.job.JobService | MAMJobService |
android.content.BroadcastReceiver | MAMBroadcastReceiver |
android.content.ContentProvider | MAMContentProvider |
android.os.Binder | MAMBinder (バインダーが Android インターフェイス定義言語 (AIDL) インターフェイスから生成されない場合にのみ必要) |
android.media.MediaPlayer | MAMMediaPlayer |
android.media.MediaMetadataRetriever | MAMMediaMetadataRetriever |
android.media.MediaRecorder | MAMMediaRecorder |
android.provider.DocumentsProvider | MAMDocumentsProvider |
android.preference.PreferenceActivity | MAMPreferenceActivity |
android.widget.PopupWindow | MAMPopupMenu |
android.widget.PopupWindow | MAMPopupWindow |
android.widget.ListPopupWindow | MAMListPopupWindow |
android.widget.TextView | MAMTextView |
android.widget.AutoCompleteTextView | MAMAutoCompleteTextView |
android.widget.CheckedTextView | MAMCheckedTextView |
android.widget.EditText | MAMEditText |
android.inputmethodservice.ExtractEditText | MAMExtractEditText |
android.widget.MultiAutoCompleteTextView | MAMMultiAutoCompleteTextView |
android.view.LayoutInflater | MAMLayoutInflater |
android.view.ViewGroup | MAMViewGroup |
android.view.SurfaceView | MAMSurfaceView |
android.opengl.GLSurfaceView | MAMGLSurfaceView |
android.widget.VideoView | MAMVideoView |
名前が変更されたメソッド
多くの場合、Android クラスで使用できるメソッドは、MAM 置換クラスで final としてマークされています。
この場合、MAM 置換クラスは、代わりにオーバーライドする必要がある同様の名前付きメソッド (一般に サフィックスが付いた MAM
) を提供します。
たとえば、MAMActivity から派生する場合は、 をオーバーライドして呼び出super.onCreate()
Activity
す代わりに、 をonCreate()
オーバーライドonMAMCreate()
して を呼び出すsuper.onMAMCreate()
必要があります。
Java コンパイラでは、MAM と同等のメソッドではなく、元のメソッドが誤ってオーバーライドされるのを防ぐために、最終的な制限を適用する必要があります。
ラップされたシステム サービス
一部のシステム サービス クラスでは、サービス インスタンスで目的のメソッドを直接呼び出すのではなく、MAM ラッパー クラスで静的メソッドを呼び出す必要があります。
たとえば、 への getSystemService(ClipboardManager.class).getPrimaryClip()
呼び出しは への呼び出し MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)
になる必要があります。
ここでも、必要なビルド プラグインによってこれらの置換が自動的に行われます。
Android クラス | Intune App SDK の置き換え |
---|---|
android.content.ClipboardManager | MAMClipboard |
android.content.ContentProviderClient | MAMContentProviderClientManagement |
android.content.ContentResolver | MAMContentResolverManagement |
android.content.pm.PackageManager | MAMPackageManagement |
android.app.DownloadManager | MAMDownloadManagement |
android.print.PrintManager | MAMPrintManagement |
android.view.View | MAMViewManagement |
android.view.DragEvent | MAMDragEventManagement |
android.view.LayoutInflater | MAMLayoutInflaterManagement |
android.app.NotificationManager | MAMNotificationManagement |
android.app.blob.BlobStoreManager | MAMBlobStoreManager |
android.app.blob.BlobStoreManager.Session | MAMBlobStoreManager.Session |
一部のクラスでは、ほとんどのメソッドがラップされていますが、 ClipboardManager
PackageManager
ContentResolver
ContentProviderClient
他のクラスでは 、 など、 DownloadManager
PrintHelper
NotificationManagerCompat
PrintManager
View
DragEvent
NotificationManager
1 つまたは 2 つのメソッドのみがラップされています。
MDM と MAM 登録
「ステージ 4 の登録と登録」で説明したように、Intune App SDK は、アカウントがポリシーで保護されるように、アプリが登録するアカウントを "登録" します。 この登録が成功すると、アカウントが管理され、MAM ポリシーがこのアカウントに適用されます。
"登録" という用語は、デバイス管理 (MDM) を有効にするためのエンド ユーザーが開始したプロセスを指すこともできます。 MDM 登録は、App Protection Policy の登録とは完全に分離されています。
SDK 統合アプリは、そのアカウントをデバイス管理に登録せずに、App Protection Policy に登録されたアカウントを持つことができます。 同様に、ユーザーは、アプリ保護ポリシーに登録されたアカウントを持つ SDK 統合アプリを持たずに、デバイス管理用のデバイスを登録できます。
通常、開発者と管理者が登録を参照する場合、アプリ保護ポリシーの登録は開発者とエンド ユーザーの両方にほとんど見えないため、MDM 登録を参照します。 MDM 登録の詳細については、「 Android デバイス の登録」を参照してください。
統合のヒント
ポータル サイト ログについて
ポータル サイトログには、Microsoft エンジニアが問題調査に使用する情報が含まれています。 一部のログは、SDK を統合する開発者にも役立ちます。
特に、ファイル DiagnosticsInfo-scrubbed.log
には、MAM によって管理されるアプリと、セクションの MAM ポリシーの詳細に関する情報が PolicyDB Information
含まれています。
すべてのマネージド アプリには、セクションにエントリがあります PolicyDB Information
。
MAM ポリシーがアプリを正しく対象としていることを確認するには、ここでアプリのパッケージ名を探す必要があります。
アプリのパッケージ名がここに表示されない場合は、ログインしたアカウントに MAM ポリシーが適用されていないことを示します。
各 MAM ポリシー設定の詳細については、Microsoft Intuneの Android アプリ保護ポリシー設定に関するページを参照してください。 これらの設定がポータル サイト ログにどのように表示されるかについては、「クライアント アプリ保護ログを確認する」を参照してください。 MAM ポリシーが想定どおりに適用されていない場合は、ログまたは診断 UI をチェック ポータル サイトし、アプリが MAM ポリシーによって管理されていることを確認し、ポリシー設定に期待される値があることを確認することをお勧めします。
ポータル サイト ログは、次のいずれかの方法で収集できます。
- ポータル サイトを通じて
- ポータル サイト アプリを開く
- 右上隅にある 3 つのドット メニューを選択します
- [設定] を選択します
- [診断ログ] で、[ログの保存] を選択します。
- プロンプトに従って出力ディレクトリを選択し、ポータル サイトログを保存します。
- コマンドを使用して
adb shell pull
、Android デバイスからローカル コンピューターにログをプルします。
- [Microsoft Edge for Android を使用してマネージド アプリ ログにアクセスする]。 これにより、ポータル サイト ログを収集し、MAM 診断を表示するための UI が表示されます。
- を呼び出
MAMPolicyManager.showDiagnostics(context)
して、ポータル サイトログを収集するために同じ UI を表示します。
ポリシーの変更による迅速なテスト
Intune App SDK のアプリの統合を開発してテストする際に、テスト ユーザーのアプリ保護ポリシー設定を頻繁に変更する場合があります。
既定では、統合アプリは Intune サービスにチェックされ、更新されたポリシーは 30 分ごとにアクティブになります。 この待機を回避し、ポータル サイトを介して強制的にチェックインできます。
- ポータル サイトを起動します。 サインインする必要はありません。
- ... を選択します。メニュー アイコン。
- [設定] を選択します。
- "管理ポリシー" という設定までスクロールします。
- [同期] ボタンを押します。
これにより、すぐにチェックがスケジュールされ、アプリとアカウントを対象とする最新のポリシーが取得されます。
AndroidX 移行のトラブルシューティング
AndroidX を利用する 前に Intune App SDK を統合した場合、AndroidX への移行中に次のようなエラーが発生する可能性があります。
incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar
これらのエラーは、アプリが SDK のレガシ サポート クラスを参照しているために発生する可能性があります。 MAM サポート クラスは、AndroidX で移動した Android サポート クラスをラップします。 このようなエラーに対処するには、すべての MAM サポート クラス参照を AndroidX と同等のものに置き換えます。 これは、最初に Gradle ビルド ファイルから MAM サポート ライブラリの依存関係を削除することで実現できます。 問題の行は次のようになります。
implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"
次に、 および com.microsoft.intune.mam.client.support.v4
パッケージ内の MAM クラスへのすべての参照を AndroidX と同等の値にcom.microsoft.intune.mam.client.support.v7
置き換えることで、結果のコンパイル時エラーを修正します。
たとえば、 への参照を MAMAppCompatActivity
AndroidX の AppCompatActivity
に変更する必要があります。
上で説明したように、MAM ビルド プラグイン/ツールは、コンパイル時に適切な MAM に相当する AndroidX ライブラリのクラスを自動的に書き換えます。
制限事項と特殊なケース
既定の登録
アプリケーションは、 既定の登録と呼ばれる簡略化されたプロセスを使用して、アプリ保護ポリシーに代わりに登録できます。 この機能は主に、MSAL を統合していないプライベート基幹業務アプリをサポートすることです。
警告
既定の登録には重要なトレードオフが付属しており、 推奨されません。 既定の登録を利用するアプリは条件付きアクセスをサポートせず、Microsoft サービスでの SSO の恩恵を受けず、Intune 以外のアカウントでは使用できません。 アプリがパブリック アプリ ストアに付属している場合、既定の登録はサポートされていません。
既定の登録では、エンド ユーザーがアプリケーションにユーザーを許可する前に、ポータル サイトをインストールし、MAM 登録フローを完了するように強制されます。
注:
既定の登録はソブリン クラウド対応です。
次の手順で既定の登録を有効にします。
アプリが MSAL を統合している場合、または SSO を有効にする必要がある場合は、 MSAL を構成します。 そうでない場合は、この手順をスキップできます。
タグの下のマニフェストに次の値を追加して、既定の登録を
<application>
有効にします。<meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
タグの下のマニフェストに次の値を追加して、MAM ポリシーを
<application>
有効にする必要があります。<meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
分離プロセス
Intune App SDK は、分離されたプロセスに保護を適用できません。
分離プロセス (android:isolatedProcess
) のサポートには、以下のメタデータ タグを追加する必要があります。
警告
このメタデータを追加することで、分離されたプロセスでデータorganization公開できないことがアプリケーションで宣言されます。 お客様のアプリケーションは、これを保証する責任を負います。
<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />
カスタム画面キャプチャの制限
Android Window
のレベルFLAG_SECURE
制限をバイパスするカスタム画面キャプチャ機能がアプリに含まれている場合は、その機能へのフル アクセスを許可する前に、画面キャプチャ ポリシーをチェックする必要があります。
たとえば、アプリでカスタム レンダリング エンジンを使用して現在のビューを PNG ファイルにレンダリングする場合は、最初に をチェックAppPolicy.getIsScreenCaptureAllowed()
する必要があります。
アプリにカスタムまたはサードパーティの画面キャプチャ機能が含まれていない場合は、画面キャプチャを制限するアクションを実行する必要はありません。
画面キャプチャ ポリシーは、すべての MAM 統合アプリの Window
レベルで自動的に適用されます。
OS または別のアプリがアプリで を Window
キャプチャしようとすると、必要に応じてブロックされます。
たとえば、ユーザーが Android の組み込みのスクリーンショットや画面記録機能を介してアプリの画面をキャプチャしようとすると、アプリからの参加なしにキャプチャが自動的に制限されます。
ポリシーの適用の制限事項
コンテンツ リゾルバーの使用: "転送または受信" Intune ポリシーは、コンテンツ リゾルバーを使用して別のアプリのコンテンツ プロバイダーにアクセスすることをブロックまたは部分的にブロックする場合があります。 これにより、メソッドは
ContentResolver
null を返すか、エラー値をスローします (たとえば、openOutputStream
ブロックされている場合はスローFileNotFoundException
されます)。 アプリは、次の呼び出しを行うことで、コンテンツ リゾルバーを介してデータを書き込めなかったのがポリシーによって発生した (またはポリシーによって引き起こされる) かどうかを判断できます。MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
または、関連するアクティビティがない場合:
MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
この 2 番目のケースでは、マルチ ID アプリは、スレッド ID を適切に設定 (または明示的な ID を呼び出しに渡す) に注意する
getPolicyForIdentity
必要があります。
エクスポートされたサービス
Intune App SDK に含まれる AndroidManifest.xml ファイルには MAMNotificationReceiverService が含まれています。これは、ポータル サイトがマネージド アプリに通知を送信できるようにするためにエクスポートされたサービスである必要があります。 サービスは呼び出し元をチェックして、ポータル サイトのみが通知の送信を許可されていることを確認します。
リフレクションの制限事項
一部の MAM 基底クラス (、 など) には、MAMActivity
MAMDocumentsProvider
特定の API レベルの上にのみ存在するパラメーターまたは戻り値の型を使用するメソッド (元の Android 基本クラスに基づく) が含まれています。
このため、リフレクションを使用してアプリ コンポーネントのすべてのメソッドを列挙できるわけではありません。
この制限は MAM に限定されるものではなく、アプリ自体が Android 基本クラスからこれらのメソッドを実装した場合に適用されるのと同じ制限です。
Robolectric
Robolectric での Intune App SDK の動作のテストはサポートされていません。 Robolectric の下で SDK を実行する既知の問題は、実際のデバイスやエミュレーター上の動作を正確に模倣しない Robolectric の下に存在するためです。
Robolectric でアプリケーションをテストする必要がある場合、推奨される回避策は、アプリケーション クラス ロジックをヘルパーに移動し、MAMApplication から継承しないアプリケーション クラスを使用して単体テスト APK を生成することです。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示