Microsoft Intune应用 SDK Xamarin 绑定

重要

Xamarin。Forms已发展成为 .NET 多平台应用 UI (MAUI) 。 现有 Xamarin 项目应迁移到 .NET MAUI。 有关将 Xamarin 项目升级到 .NET 的详细信息,请参阅 从 Xamarin 升级到 .NET & .NET MAUI 文档。

截至 2024 年 5 月 1 日,所有 Xamarin SDK(包括 Xamarin)的 Xamarin 支持已结束。Forms和Intune应用 SDK Xamarin 绑定。 有关 Android 和 iOS 平台上Intune支持,请参阅 Intune适用于 .NET MAUI 的应用 SDK - Android适用于 MAUI.iOS 的 Microsoft Intune 应用 SDK

概述

Intune应用 SDK Xamarin 绑定在使用 Xamarin 构建的 iOS 和 Android 应用中启用Intune应用保护策略。 通过绑定,开发人员可以轻松地将Intune应用保护功能内置到基于 Xamarin 的应用中。

Microsoft Intune应用 SDK Xamarin 绑定允许将Intune应用保护策略 (也称为 APP 或 MAM 策略) 合并到使用 Xamarin 开发的应用中。 已启用 MAM 的应用程序是与 Intune 应用 SDK 集成的应用程序。 当Intune主动管理应用时,IT 管理员可以将应用保护策略部署到移动应用。

支持哪些内容?

开发人员计算机

  • Windows (Visual Studio 版本 15.7+)
  • macOS

移动应用平台

  • Android
  • iOS

Intune移动应用程序管理方案

  • Intune MAM
  • Intune MDM 注册的设备
  • 已注册第三方 EMM 的设备

使用 Intune 应用 SDK Xamarin 绑定构建的 Xamarin 应用现在可以在Intune移动设备管理 (MDM) 注册设备和未注册设备上接收Intune应用保护策略。

先决条件

查看 许可条款。 打印并保留许可条款的副本作为记录。 下载并使用 Intune App SDK Xamarin 绑定即表示你同意此类许可条款。 如果你不接受它们,请不要使用该软件。

Intune SDK 依赖于 Microsoft 身份验证库 (MSAL) 来实现其身份验证和条件启动方案,这些方案要求使用Microsoft Entra ID配置应用。

如果应用程序已配置为使用 MSAL,并且有其自己的自定义客户端 ID 用于Microsoft Entra ID进行身份验证,请确保遵循向 Xamarin 应用授予对Intune移动应用程序管理的权限的步骤, (MAM) 服务。 使用Intune SDK 入门指南的“授予应用访问Intune移动应用管理服务”部分中的说明。

安全注意事项

防止潜在的欺骗、信息泄露和特权提升攻击:

在 iOS 移动应用中启用Intune应用保护策略

重要

Intune定期发布Intune应用 SDK 的更新。 定期检查Intune应用 SDK Xamarin 绑定进行更新,并纳入软件开发发布周期,以确保应用支持最新的应用保护策略设置。

  1. 添加 Microsoft.Intune。妈妈。Xamarin.iOS NuGet 包到 Xamarin.iOS 项目。

  2. 按照将 Intune 应用 SDK 集成到 iOS 移动应用所需的常规步骤进行操作。 可以从Intune应用 SDK for iOS 开发人员指南中的集成说明的步骤 3 开始。 可以跳过运行 IntuneMAMConfigurator 的该部分的最后一步,因为此工具包含在 Microsoft 中。Intune。妈妈。Xamarin.iOS 包 和 将在生成时自动运行。 重要提示:在 Visual Studio 中为应用启用密钥链共享与 Xcode 略有不同。 打开应用的“权利”列表,确保已启用“启用密钥链”选项,并在该部分中添加了相应的密钥链共享组。 然后,确保在项目“iOS 捆绑签名”选项的“自定义权利”字段中指定了“权利”列表,用于所有相应的配置/平台组合。

  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设置替代应用的默认设置。 如 Intune App SDK for iOS 开发人员指南中所述,可以通过应用的 Info.plist 中的 IntuneMAMSettings 字典执行此操作,也可以在代码中通过 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 应用 SDK 集成到 Android 移动应用所需的常规步骤,同时参考本文档了解其他详细信息。

Xamarin.Android 集成

有关集成 Intune 应用 SDK 的完整概述,请参阅适用于 Android 的 Microsoft Intune 应用 SDK 开发人员指南。 通读本指南并将 Intune 应用 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 替换类中标记为最终方法。 在这种情况下,MAM 替换类提供了一个名称类似的方法, (后缀为 MAM) ,应改为重写该方法。 例如,从 MAMActivity派生时,必须重写OnMAMCreate()并调用 ,Activity而不是重写OnCreate()和调用 base.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 注册通知

你的应用必须通过创建 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 通过将类注入 MAM 常用 Xamarin.Forms 类的类层次结构来自动执行 MAM 类替换。

注意

Xamarin。除了上面详述的 Xamarin.Android 集成之外,还必须完成Forms集成。 Xamarin 的 Remapper 行为不同。Forms应用,因此仍必须手动替换 MAM。

将重新映射器添加到项目后,需要执行 MAM 等效的替换。 例如, FormsAppCompatActivityFormsApplicationActivity 可以继续使用在应用程序中提供对 和 OnResume 的替代OnCreate分别替换为 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 添加重映射器时,可能需要重新加载并重新生成项目,以便正确识别更改。

疑难解答

  • 如果在启动时应用程序遇到空白白屏,则可能需要强制在main线程上执行导航调用。
  • Intune SDK Xamarin 绑定不支持使用跨平台框架(如 MvvmCross)的应用,因为 MvvmCross 和 Intune MAM 类之间存在冲突。 虽然一些客户在将应用迁移到普通 Xamarin 后可能已经成功集成。Forms,我们不为使用 MvvmCross 的应用开发人员提供明确的指导或插件。

公司门户应用

Intune SDK Xamarin 绑定依赖于设备上存在公司门户 Android 应用来启用应用保护策略。 公司门户从Intune服务检索应用保护策略。 当应用初始化时,它会加载策略和代码,以从公司门户强制实施该策略。 用户无需登录。

注意

当公司门户应用不在 Android 设备上时,Intune托管的应用的行为与不支持Intune应用保护策略的普通应用的行为相同。

对于无需设备注册的应用保护,用户无需使用 公司门户 应用注册设备。

示例应用程序

突出显示 Xamarin.Android 和 Xamarin 中的 MAM 功能的示例应用程序。GitHub 上提供了Forms应用。

支持

如果你的组织是现有Intune客户,请与 Microsoft 支持代表协作,在 GitHub 问题页面上开具支持票证并创建问题。 我们会尽快提供帮助。