Microsoft Intune App SDK Xamarin Bindings

重要

Xamarin。Formsは.NET マルチプラットフォーム アプリ UI (MAUI) に進化しました。 既存の Xamarin プロジェクトを .NET MAUI に移行する必要があります。 Xamarin プロジェクトを .NET にアップグレードする方法の詳細については、「 Xamarin から .NET へのアップグレード」& .NET MAUI のドキュメントを参照してください。

Xamarin を含むすべての Xamarin SDK について、Xamarin のサポートは 2024 年 5 月 1 日に終了しました。FormsとIntune App SDK Xamarin Bindings。 Android および iOS プラットフォームでのIntuneサポートについては、「app SDK for .NET MAUI - Android」および Intune「Microsoft IntuneApp SDK for MAUI.iOS」を参照してください。

概要

Intune App SDK Xamarin Bindings を使用すると、Xamarinを使用して構築された iOS アプリと Android アプリでアプリ保護ポリシーをIntuneできます。 バインドを使用すると、開発者はアプリ保護機能Intune Xamarin ベースのアプリに簡単に組み込めます。

Microsoft Intune App SDK Xamarin Bindings を使用すると、Intuneアプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) を Xamarin で開発したアプリに組み込むことができます。 MAM 対応アプリケーションは、Intune App SDK と統合されたアプリケーションです。 IT 管理者は、アプリをアクティブに管理するときに、アプリ保護ポリシー Intuneモバイル アプリに展開できます。

サポートされる内容

開発者マシン

  • Windows (Visual Studio バージョン 15.7 以降)
  • macOS

モバイル アプリ プラットフォーム

  • Android
  • iOS

モバイル アプリケーション管理のシナリオをIntuneする

  • MAM のIntune
  • MDM に登録されたデバイスのIntune
  • サード パーティの EMM 登録済みデバイス

Intune App SDK Xamarin Bindings を使用して構築された Xamarin アプリは、Intune モバイル デバイス管理 (MDM) 登録済みデバイスと登録されていないデバイスの両方でIntuneアプリ保護ポリシーを受け取ることができるようになりました。

前提条件

ライセンス条項を確認します。 レコードのライセンス条項のコピーを印刷して保持します。 Intune App SDK Xamarin Bindings をダウンロードして使用することにより、お客様はそのようなライセンス条項に同意するものとします。 お客様が同意しない場合は、本ソフトウェアを使用しないでください。

Intune SDK は、認証と条件付き起動のシナリオで Microsoft Authentication Library (MSAL) に依存しています。このシナリオでは、アプリをMicrosoft Entra IDで構成する必要があります。

アプリケーションが MSAL を使用するように既に構成されており、Microsoft Entra IDでの認証に使用される独自のカスタム クライアント ID がある場合は、Intune Mobile Application Management (MAM) サービスに対する Xamarin アプリのアクセス許可を付与する手順に従ってください。 Intune SDK ガイドの「Intune Mobile App Management サービスへのアクセス権をアプリに付与する」セクションの手順を使用します。

セキュリティに関する考慮事項

なりすまし、情報漏えい、特権攻撃の昇格の可能性を防ぐには、次の手順を実行します。

  • Xamarin アプリ開発がセキュリティで保護された作業ステーションで実行されていることを確認します。
  • バインドが有効な Microsoft ソースからであることを確認します。
  • 署名済みの変更されていない NuGet パッケージを信頼するように、プロジェクトの NuGet 構成を構成します。 詳細については、「 署名済みパッケージのインストール 」を参照してください。
  • Xamarin アプリを含む出力ディレクトリをセキュリティで保護します。 出力にユーザー レベルのディレクトリを使用することを検討してください。

iOS モバイル アプリIntuneアプリ保護ポリシーを有効にする

重要

Intuneは、Intune App SDK の更新プログラムを定期的にリリースします。 更新プログラム用の Intune App SDK Xamarin Bindings を定期的にチェックし、ソフトウェア開発リリース サイクルに組み込んで、アプリが最新の App Protection ポリシー設定をサポートしていることを確認します。

  1. Microsoft.Intune を追加します。Mam。Xamarin.iOS NuGet パッケージを Xamarin.iOS プロジェクトに追加します。

  2. Intune App SDK を iOS モバイル アプリに統合するために必要な一般的な手順に従います。 「Intune App SDK for iOS 開発者ガイド」の統合手順の手順 3 から始めることができます。 このツールは Microsoft に含まれているので、IntuneMAMConfigurator の実行のそのセクションの最後の手順をスキップできます。Intune。Mam。Xamarin.iOS パッケージと は、ビルド時に自動的に実行されます。 重要: アプリのキーチェーン共有を有効にすることは、Visual Studio と Xcode では若干異なります。 アプリのエンタイトルメント plist を開き、[キーチェーンの有効化] オプションが有効になっていて、そのセクションに適切なキーチェーン共有グループが追加されていることを確認します。 次に、すべての適切な構成/プラットフォームの組み合わせに対して、プロジェクトの "iOS バンドル署名" オプションの [カスタム エンタイトルメント] フィールドにエンタイトルメント plist が指定されていることを確認します。

  3. バインドが追加され、アプリが適切に構成されると、アプリはIntune SDK の API の使用を開始できます。 そのためには、次の名前空間を含める必要があります。

    using Microsoft.Intune.MAM;
    
  4. アプリ保護ポリシーの受信を開始するには、アプリをIntune MAM サービスに登録する必要があります。 アプリが Microsoft Authentication Library (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 ディクショナリを使用して、iOS 開発者ガイド用のIntune App SDK を参照するか、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;
    

サンプル アプリケーション

Xamarin.iOS アプリの MAM 機能を強調表示したサンプル アプリケーションは、 GitHub で入手できます。

注:

iOS/iPadOS の再マップはありません。 Xamarin への統合。Formsアプリは、通常の Xamarin.iOS プロジェクトの場合と同じである必要があります。

Android モバイル アプリIntuneアプリ保護ポリシーを有効にする

  1. Microsoft.Intune を追加します。Mam。Xamarin.Android NuGet パッケージを Xamarin.Android プロジェクトに追加します。
    1. Xamarin の場合。アプリForms、Microsoft.Intuneを追加します。Mam。Xamarin.Android プロジェクトへの Remapper.Tasks NuGet パッケージも同様です。
  2. 詳細については、このドキュメントを参照しながら、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) を提供します。 たとえば、 をオーバーライドして呼び出base.OnCreate()Activityす代わりに からMAMActivity派生する場合は、 をOnCreate()オーバーライド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 クラスに追加し Applicationandroid: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 して に登録することで、SDK からの通知に登録する MAMNotificationReceiverRegistry必要があります。 これは、次の例に示すように、受信者と で 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アプリケーションで引き続き 使用できます。 に対するOnResumeOnCreateオーバーライドが提供され、それぞれ MAM に相当するものOnMAMCreateOnMAMResume置き換FormsApplicationActivityえられます。

    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アプリ保護ポリシーをサポートしていない通常のアプリと同じように動作します。

デバイス登録を使用しないアプリ保護の場合、ユーザーは ポータル サイト アプリを使用してデバイスを登録する必要はありません

サンプル アプリケーション

Xamarin.Android と Xamarin の MAM 機能を強調表示しているサンプル アプリケーション。Formsアプリは GitHub で入手できます。

サポート

organizationが既存のIntune顧客の場合は、Microsoft サポート担当者と協力してサポート チケットを開き、GitHub の問題ページで問題を作成してください。 できる限り早急にお手伝いします。