Microsoft Intune App SDK Xamarin 系結

重要事項

Xamarin。Forms 已發展成 .NET 多平臺應用程式 UI (MAUI) 。 現有的 Xamarin 項目應該移轉至 .NET MAUI。 如需將 Xamarin 項目升級至 .NET 的詳細資訊,請參閱 從 Xamarin 升級至 .NET & .NET MAUI 檔。

包括 Xamarin 在內的所有 Xamarin SDK 自 2024 年 5 月 1 日起終止 Xamarin 支援。Forms 和 Intune App SDK Xamarin 系結。 如需 Android 和 iOS 平臺上的 Intune 支援,請參閱 Intune App SDK for .NET MAUI - AndroidMicrosoft Intune App SDK for MAUI.iOS

概觀

Intune 應用程式 SDK Xamarin 系結可在使用 Xamarin 建置的 iOS 和 Android 應用程式中啟用 Intune 應用程式保護原則。 系結可讓開發人員輕鬆地將 Intune 應用程式保護功能建置到其 Xamarin 型應用程式中。

Microsoft Intune App SDK Xamarin 系結可讓您將 Intune 應用程式保護原則 (也稱為應用程式或 MAM 原則) 併入使用 Xamarin 開發的應用程式。 啟用 MAM 的應用程式是與 Intune App SDK 整合的應用程式。 當 Intune 主動管理應用程式時,IT 系統管理員可以將應用程式保護原則部署到您的行動應用程式。

支持什麼?

開發人員機器

  • Windows (Visual Studio 15.7+ 版)
  • macOS

行動應用程式平臺

  • Android
  • iOS

Intune 行動應用程式管理案例

  • Intune MAM
  • Intune 已註冊 MDM 的裝置
  • 第三方 EMM 註冊的裝置

使用 Intune App SDK Xamarin 系結建置的 Xamarin 應用程式,現在可以在 Intune 行動裝置管理 (MDM) 註冊的裝置和未註冊的裝置上接收 Intune 應用程式保護原則。

必要條件

檢閱 授權條款。 列印並保留記錄的授權條款複本。 下載並使用 Intune App SDK Xamarin 系結,即表示您同意這類授權條款。 如果您不接受它們,請勿使用軟體。

Intune SDK 依賴 Microsoft 驗證連結庫 (MSAL) 來進行其驗證和條件式啟動案例,這需要使用 Microsoft Entra ID 設定應用程式。

如果您的應用程式已設定為使用 MSAL,並具有自己的自定義用戶端標識碼,用來向 Microsoft Entra ID 進行驗證,請確定遵循步驟,將 Xamarin 應用程式許可權授與 Intune 行動應用程式管理 (MAM) 服務。 Use the instructions in the "Give your app access to the Intune Mobile App Management service" section of the getting started with the Intune SDK guide.

安全性考量

若要防止潛在的詐騙、資訊洩漏和特權提升攻擊:

在 iOS 行動裝置應用程式中啟用 Intune 應用程式保護原則

重要事項

Intune 定期發行 Intune App SDK 的更新。 定期檢查 Intune App SDK Xamarin 系結的更新,並併入您的軟體開發發行週期,以確保您的應用程式支援最新的應用程式保護原則設定。

  1. 新增 Microsoft.Intune。媽媽。Xamarin.iOS NuGet 套件至 Xamarin.iOS 專案。

  2. 請遵循將 Intune App SDK 整合到 iOS 行動應用程式所需的一般步驟。 您可以從 Intune App SDK for iOS 開發人員指南的整合指示步驟 3 開始。 您可以略過該區段中執行 IntuneMAMConfigurator 的最後一個步驟,因為此工具包含在 Microsoft 中。Intune。媽媽。Xamarin.iOS 套件和 會在建置階段自動執行。 重要事項:在Visual Studio中啟用應用程式的金鑰鏈共用與 Xcode 稍有不同。 開啟應用程式的權利 plist,並確定已啟用 [啟用金鑰鏈] 選項,並在該區段中新增適當的密鑰鏈共用群組。 然後,確定已針對所有適當的組態/平台組合,在專案 「iOS 套件組合簽署」選項的 [自定義權利] 字段中指定權利 plist。

  3. 新增系結並正確設定應用程式之後,您的應用程式就可以開始使用 Intune SDK 的 API。 若要這樣做,您必須包含下列命名空間:

    using Microsoft.Intune.MAM;
    
  4. 若要開始接收應用程式保護原則,您的應用程式必須註冊 Intune MAM 服務。 如果您的應用程式未使用 Microsoft 驗證連結庫 (MSAL) 來驗證使用者,而且您想要 Intune SDK 來處理驗證,則您的應用程式應該將使用者的 UPN 提供給 IntuneMAMEnrollmentManager 的 LoginAndEnrollAccount 方法:

     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 覆寫屬性,在程式代碼中執行此動作。 針對 MSAL 設定為靜態的應用程式,建議使用 Info.plist 方法,而在運行時間決定這些值的應用程式則建議使用覆寫屬性。 設定所有 SSO 設定之後,您的應用程式應該在成功驗證之後,將使用者的 UPN 提供給 IntuneMAMEnrollmentManager 的 RegisterAndEnrollAccount 方法:

    IntuneMAMEnrollmentManager.Instance.RegisterAndEnrollAccount(string identity);
    

    應用程式可以藉由在 IntuneMAMEnrollmentDelegate 子類別中實作 EnrollmentRequestWithStatus 方法,並將 IntuneMAMEnrollmentManager 的 Delegate 屬性設定為該類別的實例,來判斷註冊嘗試的結果。

    註冊成功時,應用程式可以查詢下列屬性來判斷先前未知) 的已註冊帳戶 (UPN:

     string enrolledAccount = IntuneMAMEnrollmentManager.Instance.EnrolledAccount;
    

範例應用程式

GitHub 上提供醒目提示 Xamarin.iOS 應用程式中 MAM 功能的範例應用程式。

注意事項

iOS/iPadOS 沒有重新對應程式。 整合到 Xamarin 中。Forms 應用程式應該與一般 Xamarin.iOS 專案相同。

在 Android 行動裝置應用程式中啟用 Intune 應用程式保護原則

  1. 新增 Microsoft.Intune。媽媽。Xamarin.Android NuGet 套件至您的 Xamarin.Android 專案。
    1. 適用於 Xamarin。Forms 應用程式,新增 Microsoft.Intune。媽媽。Remapper.Tasks NuGet 套件也會套件至您的 Xamarin.Android 專案。
  2. 請遵循將 Intune App SDK 整合到 Android 行動應用程式所需的一般步驟,同時參閱此檔以取得其他詳細數據。

Xamarin.Android 整合

您可以在 Microsoft Intune App SDK for Android 開發人員指南中找到整合 Intune App SDK 的完整概觀。 當您閱讀本指南並將 Intune App SDK 與 Xamarin 應用程式整合時,下列各節旨在強調以 Java 開發的原生 Android 應用程式與以 C# 開發的 Xamarin 應用程式實作之間的差異。 這些章節應視為補充,而且不能做為完整閱讀指南的替代專案。

重新對應程式

從 1.4428.1 版開始, Microsoft.Intune.MAM.Remapper 套件可以新增到 Xamarin.Android 應用程式作為 建置工具 ,以執行 MAM 類別、方法和系統服務取代。 如果包含 Remapper,在建置應用程式時,將會自動執行重新命名方法和 MAM 應用程式區段的 MAM 對等取代部分。

若要從重新對應程式的 MAM 化排除類別,您可以在項目 .csproj 檔案中新增下列屬性。

  <PropertyGroup>
    <ExcludeClasses>Semicolon separated list of relative class paths to exclude from MAM-ification</ExcludeClasses>
  </PropertyGroup>

注意事項

Remapper 目前可防止在 Xamarin.Android 應用程式中偵錯。 建議您手動整合以偵錯您的應用程式。

已重新命名的方法

在許多情況下,Android 類別中可用的方法在 MAM 取代類別中已標示為最終方法。 在此情況下,MAM 取代類別會提供類似的具名方法, (后加上 MAM 您應該改為覆寫的) 。 例如,衍MAMActivity生自 時,您必須覆OnMAMCreate()寫 並呼叫 ,而不是覆OnCreate()寫和呼叫 Activitybase.OnCreate()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 註冊通知

您的應用程式必須藉由建立 MAMNotificationReceiverMAMNotificationReceiverRegistry向 註冊通知,以註冊來自 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 套件會藉由將類別插入 MAM 常用 Xamarin.Forms 類別的類別階層,自動執行 MAM 類別取代。

注意事項

Xamarin。除了上面詳述的 Xamarin.Android 整合之外,還必須 Forms 整合。 重新對應程式在 Xamarin 中的行為不同。Forms 應用程式,因此仍然必須進行手動 MAM 更換。

將 Remapper 新增至項目之後,您必須執行 MAM 對等的取代。 例如, FormsAppCompatActivityFormsApplicationActivity 可以繼續在應用程式中使用,而提供的覆寫會 OnCreate 分別覆寫 和 OnResume ,並取代為 MAM 對等專案 OnMAMCreateOnMAMResume

    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出現。 這是預期的,因為當 Remapper 修改 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 系結不支援使用跨平台架構的應用程式,例如MvvmCross,因為MvvmCross和 Intune MAM 類別之間發生衝突。 雖然有些客戶在將其應用程式移至純 Xamarin 之後,可能已成功整合。Forms,我們不會為使用MvvmCross的應用程式開發人員提供明確的指引或外掛程式。

公司入口網站 應用程式

Intune SDK Xamarin 系結依賴裝置上存在 公司入口網站 Android 應用程式來啟用應用程式保護原則。 公司入口網站 會從 Intune 服務擷取應用程式保護原則。 當應用程式初始化時,它會載入原則和程序代碼,以從 公司入口網站 強制執行該原則。 使用者不需要登入。

注意事項

當 公司入口網站 應用程式不在 Android 裝置上時,Intune 受控應用程式的行為與不支援 Intune 應用程式保護原則的一般應用程式相同。

針對沒有裝置註冊的應用程式保護,使用者不需要使用 公司入口網站 應用程式來註冊裝置。

範例應用程式

醒目提示 Xamarin.Android 和 Xamarin 中 MAM 功能的範例應用程式。Forms 應用程式可在 GitHub 上取得。

支援

如果您的組織是現有的 Intune 客戶,請與您的 Microsoft 支援代表合作,在 GitHub 問題頁面上開啟支援票證並建立問題。 我們會儘速提供協助。