Microsoft Intune App SDK Xamarin Bindings
重要
Xamarin.Forms は.NET マルチプラットフォーム アプリ UI (MAUI) に進化しました。 既存の Xamarin プロジェクトを .NET MAUI に移行する必要があります。 Xamarin プロジェクトを .NET にアップグレードする方法の詳細については、「 Xamarin から .NET へのアップグレード」& .NET MAUI のドキュメントを参照してください。
Xamarin のサポートは、Xamarin.Forms と Intune App SDK Xamarin Bindings を含むすべての Xamarin SDK に対して、2024 年 5 月 1 日に終了しました。 Android および iOS プラットフォームでの Intune サポートについては、「 Intune App SDK for .NET MAUI - Android」および 「Microsoft Intune App SDK for MAUI.iOS」を参照してください。
概要
Intune App SDK Xamarin Bindings を使用すると、Xamarin で構築された iOS アプリと Android アプリで Intune アプリ保護ポリシー が有効になります。 バインドを使用すると、開発者は Intune アプリ保護機能を Xamarin ベースのアプリに簡単に組み込めます。
Microsoft Intune App SDK Xamarin Bindings を使用すると、Xamarin で開発されたアプリに Intune アプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) を組み込むことができます。 MAM 対応アプリケーションは、Intune App SDK と統合されたアプリケーションです。 IT 管理者は、Intune がアプリをアクティブに管理するときに、アプリ保護ポリシーをモバイル アプリに展開できます。
サポートされる内容
開発者マシン
- Windows (Visual Studio バージョン 15.7 以降)
- macOS
モバイル アプリ プラットフォーム
- Android
- iOS
Intune Mobile Application Management のシナリオ
- Intune MAM
- Intune MDM に登録されたデバイス
- サード パーティの EMM 登録済みデバイス
Intune App SDK Xamarin Bindings を使用して構築された Xamarin アプリは、Intune モバイル デバイス管理 (MDM) 登録済みデバイスと登録されていないデバイスの両方で Intune アプリ保護ポリシーを受け取ることができるようになりました。
前提条件
ライセンス条項を確認します。 レコードのライセンス条項のコピーを印刷して保持します。 Intune App SDK Xamarin Bindings をダウンロードして使用することで、お客様はそのようなライセンス条項に同意するものとします。 お客様が同意しない場合は、本ソフトウェアを使用しないでください。
Intune SDK は、Microsoft Entra ID を使用してアプリを構成する必要がある、認証と条件付き起動シナリオに Microsoft Authentication Library (MSAL) に依存しています。
アプリケーションが MSAL を使用するように既に構成されており、Microsoft Entra ID での認証に使用される独自のカスタム クライアント ID がある場合は、Intune Mobile Application Management (MAM) サービスに Xamarin アプリのアクセス許可を付与する手順に従ってください。 Intune SDK ガイドの概要に関するページの「Intune Mobile App Management サービスへのアクセス権をアプリに付与する」セクションの手順を使用します。
セキュリティに関する考慮事項
なりすまし、情報漏えい、特権攻撃の昇格の可能性を防ぐには、次の手順を実行します。
- Xamarin アプリ開発がセキュリティで保護された作業ステーションで実行されていることを確認します。
- バインドが有効な Microsoft ソースからであることを確認します。
- MS Intune App SDK NuGet プロファイル
- Intune App SDK Xamarin GitHub リポジトリ
- 署名済みの変更されていない NuGet パッケージを信頼するように、プロジェクトの NuGet 構成を構成します。 詳細については、「 署名済みパッケージのインストール 」を参照してください。
- Xamarin アプリを含む出力ディレクトリをセキュリティで保護します。 出力にユーザー レベルのディレクトリを使用することを検討してください。
iOS モバイル アプリで Intune アプリ保護ポリシーを有効にする
重要
Intune では、Intune App SDK の更新プログラムが定期的にリリースされます。 Intune App SDK Xamarin Bindings で更新プログラムを定期的に確認し、ソフトウェア開発リリース サイクルに組み込んで、アプリが最新の App Protection ポリシー設定をサポートしていることを確認します。
Microsoft.Intune.MAM.Xamarin.iOS NuGet パッケージを Xamarin.iOS プロジェクトに追加します。
Intune App SDK を iOS モバイル アプリに統合するために必要な一般的な手順に従います。 「Intune App SDK for iOS 開発者ガイド」の統合手順の手順 3 から始めることができます。 このツールは Microsoft.Intune.MAM.Xamarin.iOS パッケージに含まれており、ビルド時に自動的に実行されるため、IntuneMAMConfigurator の実行のそのセクションの最後の手順をスキップできます。 重要: アプリのキーチェーン共有を有効にすることは、Visual Studio と Xcode では若干異なります。 アプリの [エンタイトルメント] plist を開き、[キーチェーンを有効にする] オプションが有効になっていることを確認し、そのセクションに適切なキーチェーン共有グループが追加されていることを確認します。 次に、すべての適切な構成/プラットフォームの組み合わせに対して、プロジェクトの "iOS バンドル署名" オプションの [カスタム エンタイトルメント] フィールドにエンタイトルメント plist が指定されていることを確認します。
バインドが追加され、アプリが適切に構成されると、アプリは Intune SDK の API の使用を開始できます。 そのためには、次の名前空間を含める必要があります。
using Microsoft.Intune.MAM;
アプリ保護ポリシーの受信を開始するには、アプリを Intune MAM サービスに登録する必要があります。 アプリで Microsoft 認証ライブラリ (MSAL) を使用してユーザーを認証せず、Intune SDK で認証を処理する場合、アプリは IntuneMAMEnrollmentManager の LoginAndEnrollAccount メソッドにユーザーの UPN を提供する必要があります。
IntuneMAMEnrollmentManager.Instance.LoginAndEnrollAccount([NullAllowed] string identity);
呼び出し時にユーザーの UPN が不明な場合、アプリは null を渡す可能性があります。 この場合、ユーザーはメール アドレスとパスワードの両方を入力するように求められます。
アプリで既に MSAL を使用してユーザーを認証している場合は、アプリと Intune SDK の間でシングル サインオン (SSO) エクスペリエンスを構成できます。 まず、Intune SDK で使用される既定の Microsoft Entra 設定をアプリの設定でオーバーライドする必要があります。 これを行うには、アプリの Info.plist の IntuneMAMSettings ディクショナリを使用して行うことができます。これは、 Intune App SDK for iOS 開発者ガイドで説明されているように、または IntuneMAMSettings クラスの Microsoft Entra ID オーバーライド プロパティを使用してコードで行うことができます。 Info.plist アプローチは、MSAL 設定が静的なアプリケーションに対して推奨されますが、オーバーライド プロパティは実行時にこれらの値を決定するアプリケーションに推奨されます。 すべての SSO 設定が構成されたら、アプリが正常に認証された後、IntuneMAMEnrollmentManager の RegisterAndEnrollAccount メソッドにユーザーの UPN を提供する必要があります。
IntuneMAMEnrollmentManager.Instance.RegisterAndEnrollAccount(string identity);
アプリは、IntuneMAMEnrollmentDelegate のサブクラスに EnrollmentRequestWithStatus メソッドを実装し、IntuneMAMEnrollmentManager の Delegate プロパティをそのクラスのインスタンスに設定することで、登録試行の結果を判断できます。
登録が成功すると、アプリは次のプロパティに対してクエリを実行することで、登録されたアカウントの UPN (以前は不明な場合) を判断できます。
string enrolledAccount = IntuneMAMEnrollmentManager.Instance.EnrolledAccount;
Android モバイル アプリで Intune アプリ保護ポリシーを有効にする
-
Microsoft.Intune.MAM.Xamarin.Android NuGet パッケージを Xamarin.Android プロジェクトに追加します。
- Xamarin.Forms アプリの場合は、 Microsoft.Intune.MAM.Remapper.Tasks NuGet パッケージ を Xamarin.Android プロジェクトにも追加します。
- 詳細については、このドキュメントを参照しながら 、Intune App SDK を Android モバイル アプリに統合するために必要な一般的な手順に従ってください。
Xamarin.Android の統合
Intune App SDK を統合するための完全な概要については、「 Microsoft Intune App SDK for Android 開発者ガイド」を参照してください。 ガイドを読み、Intune App SDK を Xamarin アプリと統合する際に、次のセクションでは、Java で開発されたネイティブ Android アプリの実装と C# で開発された Xamarin アプリの実装の違いを強調することを目的としています。 これらのセクションは補足として扱う必要があり、ガイド全体を読む代わりに機能することはできません。
再マップ
1.4428.1 リリース以降では、 Microsoft.Intune.MAM.Remapper
パッケージを ビルド ツール として Xamarin.Android アプリケーションに追加して、MAM クラス、メソッド、システム サービスの置換を実行できます。 再マップが含まれている場合、名前が変更されたメソッドと MAM アプリケーション セクションの MAM と同等の置換部分は、アプリケーションのビルド時に自動的に実行されます。
Remapper によって MAM-ification からクラスを除外するには、プロジェクト .csproj
ファイルに次のプロパティを追加できます。
<PropertyGroup>
<ExcludeClasses>Semicolon separated list of relative class paths to exclude from MAM-ification</ExcludeClasses>
</PropertyGroup>
注:
現在、再マップ機能は Xamarin.Android アプリでのデバッグを禁止しています。 アプリケーションをデバッグするには、手動統合をお勧めします。
名前が変更されたメソッド
多くの場合、Android クラスで使用できるメソッドは、MAM 置換クラスで final としてマークされています。 この場合、MAM 置換クラスは、代わりにオーバーライドする必要がある、同様の名前のメソッド ( MAM
サフィックス付き) を提供します。 たとえば、MAMActivity
から派生する場合、OnCreate()
をオーバーライドしてbase.OnCreate()
を呼び出す代わりに、Activity
OnMAMCreate()
をオーバーライドし、base.OnMAMCreate()
を呼び出す必要があります。
MAM アプリケーション
アプリでは、 Android.App.Application
クラスを定義する必要があります。 MAM を手動で統合する場合は、 MAMApplication
から継承する必要があります。 サブクラスが [Application]
属性で適切に装飾され、 (IntPtr, JniHandleOwnership)
コンストラクターをオーバーライドしていることを確認します。
[Application]
class TaskrApp : MAMApplication
{
public TaskrApp(IntPtr handle, JniHandleOwnership transfer)
: base(handle, transfer) { }
注:
MAM Xamarin バインドに関する問題により、デバッグ モードで展開するとアプリケーションがクラッシュする可能性があります。 回避策として、 Debuggable=false
属性を Application
クラスに追加し、手動で設定した場合は android:debuggable="true"
フラグをマニフェストから削除する必要があります。
アプリの参加を必要とする機能を有効にする
例: アプリに PIN が必要かどうかを判断する
MAMPolicyManager.GetPolicy(currentActivity).IsPinRequired;
例: プライマリ Intune ユーザーを特定する
IMAMUserInfo info = MAMComponents.Get<IMAMUserInfo>();
return info?.PrimaryUser;
例: デバイスまたはクラウド ストレージへの保存が許可されているかどうかを判断する
MAMPolicyManager.GetPolicy(currentActivity).GetIsSaveToLocationAllowed(SaveLocation service, String username);
SDK からの通知に登録する
アプリは、 MAMNotificationReceiver
を作成し、 MAMNotificationReceiverRegistry
に登録することで、SDK からの通知に登録する必要があります。 これは、次の例に示すように、受信者と App.OnMAMCreate
で必要な通知の種類を指定することによって行われます。
public override void OnMAMCreate()
{
// Register the notification receivers
IMAMNotificationReceiverRegistry registry = MAMComponents.Get<IMAMNotificationReceiverRegistry>();
foreach (MAMNotificationType notification in MAMNotificationType.Values())
{
registry.RegisterReceiver(new ToastNotificationReceiver(this), notification);
}
...
MAM 登録マネージャー
IMAMEnrollmentManager mgr = MAMComponents.Get<IMAMEnrollmentManager>();
Xamarin.Forms の統合
Xamarin.Forms
アプリケーションの場合、Microsoft.Intune.MAM.Remapper
パッケージは、一般的に使用されるXamarin.Forms
クラスのクラス階層にMAM
クラスを挿入することで、MAM クラスの置換を自動的に実行します。
注:
Xamarin.Forms 統合は、上記の Xamarin.Android 統合に加えて行う必要があります。 再マップ機能は Xamarin.Forms アプリの動作が異なるため、手動の MAM 置換は引き続き行う必要があります。
再マップがプロジェクトに追加されたら、MAM と同等の置換を実行する必要があります。 たとえば、 FormsAppCompatActivity
と FormsApplicationActivity
は、アプリケーションで引き続き使用できます。 OnCreate
と OnResume
のオーバーライドは、それぞれ MAM の同等の OnMAMCreate
と OnMAMResume
に置き換えられます。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnMAMCreate(Bundle savedInstanceState)
{
base.OnMAMCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
置換が行われなかった場合は、置換を行うまで、次のコンパイル エラーが発生する可能性があります。
-
コンパイラ エラー CS0239。 このエラーは、このフォーム
'MainActivity.OnCreate(Bundle)': cannot override inherited member 'MAMAppCompatActivityBase.OnCreate(Bundle)' because it is sealed
でよく見られます。 これは、再マップによって Xamarin クラスの継承が変更されると、特定の関数がsealed
され、代わりにオーバーライドするために新しい MAM バリアントが追加されるためです。 -
コンパイラ エラー CS0507: このエラーは、このフォーム
'MyActivity.OnRequestPermissionsResult()' cannot change access modifiers when overriding 'public' inherited member ...
でよく見られます。 リマッパーが一部の Xamarin クラスの継承を変更すると、特定のメンバー関数がpublic
に変更されます。 これらの関数のいずれかをオーバーライドする場合は、それらのオーバーライドのアクセス修飾子もpublic
に変更する必要があります。
注:
再マップ機能は、Visual Studio が IntelliSense の自動補完に使用する依存関係を書き直します。 そのため、IntelliSense で変更を正しく認識するために Remapper が追加されたときに、プロジェクトの再読み込みと再構築が必要になる場合があります。
トラブルシューティング
- 起動時にアプリケーションで空白の白い画面が表示された場合は、メイン スレッドでナビゲーション呼び出しを強制的に実行することが必要になる場合があります。
- Intune SDK Xamarin Bindings では、MvvmCross と Intune MAM クラス間の競合が原因で、MvvmCross などのクロスプラットフォーム フレームワークを使用しているアプリはサポートされていません。 一部のお客様は、アプリをプレーンな Xamarin.Forms に移行した後に統合に成功した可能性があります。MvvmCross を使用するアプリ開発者向けの明示的なガイダンスやプラグインは提供していません。
ポータル サイト アプリ
Intune SDK Xamarin Bindings は、デバイス上の ポータル サイト Android アプリの存在に依存して、アプリ保護ポリシーを有効にします。 ポータル サイトは、Intune サービスからアプリ保護ポリシーを取得します。 アプリが初期化されると、ポリシーとコードが読み込まれて、ポータル サイトからそのポリシーが適用されます。 ユーザーはサインインする必要はありません。
注:
ポータル サイト アプリが Android デバイス上にない場合、Intune で管理されるアプリは、Intune アプリ保護ポリシーをサポートしていない通常のアプリと同じように動作します。
デバイス登録を使用しないアプリ保護の場合、ユーザーはポータル サイト アプリを使用してデバイスを登録する必要 はありません 。
サポート
組織が既存の Intune のお客様の場合は、Microsoft サポート担当者と協力してサポート チケットを開き、GitHub の問題ページで問題を作成してください。 できる限り早急にお手伝いします。