Binding Xamarin di Microsoft Intune App SDK

Nota

Le associazioni Xamarin correnti per la piattaforma Android supportano solo le app destinate ad Android 9.0 e versioni inferiori e Xamarin Forms 4.4 e versioni inferiori. Microsoft sta lavorando per migliorare il supporto per le versioni più recenti in Android fornendo Intune supporto su .NET MAUI. La versione beta per il supporto di .NET MAUI è ora disponibile. Per altre informazioni, vedere Intune App SDK per .NET MAUI - Android. Per il supporto di .NET MAUI in iOS, vedere Intune App SDK per .NET MAUI - iOS. Vedere Criteri di supporto di Xamarin ed Eseguire la migrazione dell'app da Xamarin.Forms per altre informazioni sul supporto Xamarin e sulla migrazione delle app da Xamarin Forms a .NET MAUI.

È possibile leggere prima di tutto l'articolo Introduzione a Intune App SDK, che illustra come prepararsi per l'integrazione in ogni piattaforma supportata.

Panoramica

Le associazioni Xamarin di Intune App SDK consentono Intune criteri di protezione delle app nelle app iOS e Android compilate con Xamarin. Le associazioni consentono agli sviluppatori di integrare facilmente le funzionalità di protezione delle app Intune nell'app basata su Xamarin.

I Microsoft Intune binding Xamarin di App SDK consentono di incorporare Intune criteri di protezione delle app (noti anche come criteri APP o MAM) nelle app sviluppate con Xamarin. Un'applicazione abilitata per MAM è integrata con Intune App SDK. Gli amministratori IT possono distribuire criteri di protezione delle app nell'app per dispositivi mobili quando Intune gestisce attivamente l'app.

Cosa è supportato?

Computer per sviluppatori

  • Windows (Visual Studio versione 15.7+)
  • macOS

Piattaforme di app per dispositivi mobili

  • Android
  • iOS

scenari di gestione di applicazioni mobili Intune

  • Intune MAM
  • Intune dispositivi registrati con MDM
  • Dispositivi registrati con EMM di terze parti

Le app Xamarin compilate con i binding Xamarin Intune App SDK possono ora ricevere Intune criteri di protezione delle app sia nei dispositivi registrati Intune gestione dei dispositivi mobili (MDM) che nei dispositivi non registrati.

Prerequisiti

Esaminare le condizioni di licenza. Stampare e conservare una copia delle condizioni di licenza per i record. Scaricando e usando le associazioni Xamarin Intune App SDK, si accettano tali condizioni di licenza. Se non li accetti, non usare il software.

L'SDK Intune si basa su Microsoft Authentication Library (MSAL) per gli scenari di autenticazione e avvio condizionale, che richiedono la configurazione delle app con Microsoft Entra ID.

Se l'applicazione è già configurata per l'uso di MSAL e ha un proprio ID client personalizzato usato per l'autenticazione con Microsoft Entra ID, assicurarsi che vengano seguiti i passaggi per concedere all'app Xamarin le autorizzazioni per il servizio di gestione delle applicazioni mobili (MAM) Intune. Usare le istruzioni riportate nella sezione "Concedere all'app l'accesso al servizio di gestione delle app per dispositivi mobili Intune" della guida introduttiva all'SDK Intune.

Considerazioni sulla sicurezza

Per evitare potenziali attacchi di spoofing, divulgazione di informazioni e elevazione dei privilegi:

Abilitazione Intune criteri di protezione delle app nell'app per dispositivi mobili iOS

Importante

Intune rilascia regolarmente gli aggiornamenti per Intune App SDK. Controllare regolarmente le associazioni Xamarin di Intune App SDK per gli aggiornamenti e incorporare nel ciclo di rilascio dello sviluppo software per assicurarsi che le app supportano le impostazioni più recenti dei criteri di protezione delle app.

  1. Aggiungere microsoft.Intune. MAM. Pacchetto NuGet Xamarin.iOS nel progetto Xamarin.iOS.

  2. Seguire i passaggi generali necessari per integrare Intune App SDK in un'app per dispositivi mobili iOS. È possibile iniziare con il passaggio 3 delle istruzioni di integrazione della guida per sviluppatori Intune App SDK per iOS. È possibile ignorare il passaggio finale in quella sezione dell'esecuzione di IntuneMAMConfigurator, poiché questo strumento è incluso in Microsoft. Intune. MAM. Pacchetto Xamarin.iOS e verrà eseguito automaticamente in fase di compilazione. Importante: l'abilitazione della condivisione keychain per un'app è leggermente diversa in Visual Studio da Xcode. Aprire l'elenco Entitlements dell'app e verificare che l'opzione "Abilita portachiava" sia abilitata e che in tale sezione vengano aggiunti i gruppi di condivisione del keychain appropriati. Assicurarsi quindi che l'elenco diritti sia specificato nel campo "Diritti personalizzati" delle opzioni "Firma bundle iOS" del progetto per tutte le combinazioni di configurazione/piattaforma appropriate.

  3. Dopo aver aggiunto le associazioni e aver configurato correttamente l'app, l'app può iniziare a usare le API di Intune SDK. A tale scopo, è necessario includere lo spazio dei nomi seguente:

    using Microsoft.Intune.MAM;
    
  4. Per iniziare a ricevere i criteri di protezione delle app, l'app deve registrarsi nel servizio MAM Intune. Se l'app non usa Microsoft Authentication Library (MSAL) per autenticare gli utenti e si vuole che Intune SDK gestisca l'autenticazione, l'app deve fornire l'UPN dell'utente al metodo LoginAndEnrollAccount di IntuneMAMEnrollmentManager:

     IntuneMAMEnrollmentManager.Instance.LoginAndEnrollAccount([NullAllowed] string identity);
    

    Le app potrebbero passare null se l'UPN dell'utente è sconosciuto al momento della chiamata. In questo caso, agli utenti verrà richiesto di immettere sia l'indirizzo di posta elettronica che la password.

    Se l'app usa già MSAL per autenticare gli utenti, è possibile configurare un'esperienza Single Sign-On (SSO) tra l'app e Intune SDK. Prima di tutto, dovrai sostituire le impostazioni di Microsoft Entra predefinite usate da Intune SDK con quelle dell'app. È possibile eseguire questa operazione tramite il dizionario IntuneMAMSettings nell'info.plist dell'app, come indicato nella guida per sviluppatori Intune App SDK per iOS, oppure nel codice tramite le proprietà di override Microsoft Entra ID della classe IntuneMAMSettings. L'approccio Info.plist è consigliato per le applicazioni le cui impostazioni MSAL sono statiche, mentre le proprietà di override sono consigliate per le applicazioni che determinano tali valori in fase di esecuzione. Dopo aver configurato tutte le impostazioni SSO, l'app deve fornire l'UPN dell'utente al metodo RegisterAndEnrollAccount di IntuneMAMEnrollmentManager dopo aver eseguito correttamente l'autenticazione:

    IntuneMAMEnrollmentManager.Instance.RegisterAndEnrollAccount(string identity);
    

    Le app possono determinare il risultato di un tentativo di registrazione implementando il metodo EnrollmentRequestWithStatus in una sottoclasse di IntuneMAMEnrollmentDelegate e impostando la proprietà Delegate di IntuneMAMEnrollmentManager su un'istanza di tale classe.

    Al termine della registrazione, le app possono determinare l'UPN dell'account registrato (se in precedenza sconosciuto) eseguendo una query sulla proprietà seguente:

     string enrolledAccount = IntuneMAMEnrollmentManager.Instance.EnrolledAccount;
    

Applicazioni di esempio

Le applicazioni di esempio che evidenziano la funzionalità MAM nelle app Xamarin.iOS sono disponibili in GitHub.

Nota

Non è disponibile alcun remapper per iOS/iPadOS. Integrazione in Xamarin. Forms'app deve essere uguale a quella di un normale progetto Xamarin.iOS.

Abilitazione Intune criteri di protezione delle app nell'app per dispositivi mobili Android

  1. Aggiungere microsoft.Intune. MAM. Pacchetto NuGet Xamarin.Android nel progetto Xamarin.Android.
    1. Per una Xamarin. Forms'app aggiungere microsoft.Intune. MAM. Anche il pacchetto NuGet Remapper.Tasks nel progetto Xamarin.Android.
  2. Seguire i passaggi generali necessari per integrare Intune App SDK in un'app per dispositivi mobili Android facendo riferimento a questo documento per altri dettagli.

Integrazione di Xamarin.Android

Una panoramica completa per l'integrazione di Intune App SDK è disponibile nella guida per sviluppatori Microsoft Intune App SDK per Android. Durante la lettura della guida e l'integrazione di Intune App SDK con l'app Xamarin, le sezioni seguenti sono destinate a evidenziare le differenze tra l'implementazione per un'app Android nativa sviluppata in Java e un'app Xamarin sviluppata in C#. Queste sezioni devono essere considerate supplementari e non possono sostituire la lettura della guida nella sua interezza.

Remapper

A partire dalla versione 1.4428.1, il Microsoft.Intune.MAM.Remapper pacchetto può essere aggiunto a un'applicazione Xamarin.Android come strumento di compilazione per eseguire le sostituzioni dei servizi di classe, metodo e sistema MAM. Se il remapper è incluso, le parti di sostituzione equivalenti MAM delle sezioni Metodi rinominati e Applicazione MAM verranno eseguite automaticamente quando viene compilata l'applicazione.

Per escludere una classe da MAM-ification da Remapper, è possibile aggiungere la proprietà seguente nel file di progetti .csproj .

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

Nota

Remapper attualmente impedisce il debug nelle app Xamarin.Android. L'integrazione manuale è consigliata per eseguire il debug dell'applicazione.

Metodi rinominati

In molti casi, un metodo disponibile nella classe Android è stato contrassegnato come finale nella classe di sostituzione MAM. In questo caso, la classe di sostituzione MAM fornisce un metodo denominato simile (con MAMsuffisso ) che è invece necessario eseguire l'override. Ad esempio, quando si deriva da MAMActivity, invece di eseguire l'override OnCreate() di e chiamare base.OnCreate(), Activity è necessario eseguire l'override OnMAMCreate() e chiamare base.OnMAMCreate().

Applicazione MAM

L'app deve definire una Android.App.Application classe. Se si integra manualmente MAM, deve ereditare da MAMApplication. Assicurarsi che la sottoclasse sia decorata correttamente con l'attributo ed esegui l'override [Application] del (IntPtr, JniHandleOwnership) costruttore.

    [Application]
    class TaskrApp : MAMApplication
    {
    public TaskrApp(IntPtr handle, JniHandleOwnership transfer)
        : base(handle, transfer) { }

Nota

Un problema con le associazioni MAM Xamarin può causare l'arresto anomalo dell'applicazione quando viene distribuita in modalità di debug. Come soluzione alternativa, l'attributo Debuggable=false deve essere aggiunto alla Application classe e il android:debuggable="true" flag deve essere rimosso dal manifesto se è stato impostato manualmente.

Abilitare le funzionalità che richiedono la partecipazione alle app

Esempio: determinare se il PIN è necessario per l'app

MAMPolicyManager.GetPolicy(currentActivity).IsPinRequired;

Esempio: Determinare l'utente Intune primario

IMAMUserInfo info = MAMComponents.Get<IMAMUserInfo>();
return info?.PrimaryUser;

Esempio: determinare se il salvataggio nel dispositivo o nell'archiviazione cloud è consentito

MAMPolicyManager.GetPolicy(currentActivity).GetIsSaveToLocationAllowed(SaveLocation service, String username);

Eseguire la registrazione per le notifiche dall'SDK

L'app deve registrarsi per le notifiche dall'SDK creando un MAMNotificationReceiver oggetto e registrandolo con MAMNotificationReceiverRegistry. Questa operazione viene eseguita fornendo il ricevitore e il tipo di notifica desiderato in , come illustrato nell'esempio App.OnMAMCreateseguente:

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);
    }
    ...

Gestione registrazione MAM

IMAMEnrollmentManager mgr = MAMComponents.Get<IMAMEnrollmentManager>();

Xamarin. integrazione Forms

Per Xamarin.Forms le applicazioni, il pacchetto esegue automaticamente la Microsoft.Intune.MAM.Remapper sostituzione delle classi MAM inserendo MAM le classi nella gerarchia di classi delle classi di uso Xamarin.Forms comune.

Nota

Il Xamarin. Forms integrazione deve essere eseguita in aggiunta all'integrazione di Xamarin.Android descritta in precedenza. Il remapper si comporta in modo diverso per Xamarin. Forms le app, quindi le sostituzioni MAM manuali devono ancora essere eseguite.

Dopo aver aggiunto il remapper al progetto, sarà necessario eseguire le sostituzioni equivalenti mam. Ad esempio, FormsAppCompatActivity e FormsApplicationActivity possono continuare a essere usati nell'applicazione, le sostituzioni fornite a OnCreate e OnResume vengono sostituite rispettivamente con gli equivalenti OnMAMCreate MAM e 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());
        }

Se le sostituzioni non vengono effettuate, è possibile che si verifichino gli errori di compilazione seguenti fino a quando non si apportano le sostituzioni:

  • Errore del compilatore CS0239. Questo errore viene comunemente visualizzato in questo formato 'MainActivity.OnCreate(Bundle)': cannot override inherited member 'MAMAppCompatActivityBase.OnCreate(Bundle)' because it is sealed. Questo è previsto perché quando Remapper modifica l'ereditarietà delle classi Xamarin, verranno create sealed alcune funzioni e verrà aggiunta una nuova variante MAM per eseguire l'override.
  • Errore del compilatore CS0507: questo errore è comunemente visualizzato in questo formato 'MyActivity.OnRequestPermissionsResult()' cannot change access modifiers when overriding 'public' inherited member .... Quando Remapper modifica l'ereditarietà di alcune classi Xamarin, alcune funzioni membro verranno modificate in public. Se si esegue l'override di una di queste funzioni, sarà necessario modificare anche i modificatori di accesso per tali sostituzioni public .

Nota

Remapper ri scrive una dipendenza usata da Visual Studio per il completamento automatico di IntelliSense. Pertanto, potrebbe essere necessario ricaricare e ricompilare il progetto quando viene aggiunto il remapper per IntelliSense per riconoscere correttamente le modifiche.

Risoluzione dei problemi

  • Se si verifica una schermata bianca vuota nell'applicazione all'avvio, potrebbe essere necessario forzare l'esecuzione delle chiamate di spostamento nel thread principale.
  • I binding Xamarin Intune SDK non supportano le app che usano un framework multipiattaforma come MvvmCross a causa di conflitti tra MvvmCross e Intune classi MAM. Anche se alcuni clienti potrebbero avere avuto successo con l'integrazione dopo aver spostato le proprie app in Xamarin normale. Forms, non vengono fornite indicazioni esplicite o plug-in per gli sviluppatori di app che usano MvvmCross.

Portale aziendale'app

I binding Xamarin Intune SDK si basano sulla presenza dell'app Android Portale aziendale nel dispositivo per abilitare i criteri di protezione delle app. Il Portale aziendale recupera i criteri di protezione delle app dal servizio Intune. Quando l'app viene inizializzata, carica criteri e codice per applicare tale criterio dal Portale aziendale. L'utente non deve essere connesso.

Nota

Quando l'app Portale aziendale non si trova nel dispositivo Android, un'app gestita da Intune si comporta come un'app normale che non supporta Intune criteri di protezione delle app.

Per la protezione delle app senza registrazione del dispositivo, l'utente non è tenuto a registrare il dispositivo usando l'app Portale aziendale.

Applicazioni di esempio

Applicazioni di esempio che evidenziano la funzionalità MAM in Xamarin.Android e Xamarin. Forms app sono disponibili in GitHub.

Supporto tecnico

Se l'organizzazione è un cliente Intune esistente, collaborare con il rappresentante del supporto Microsoft per aprire un ticket di supporto e creare un problema nella pagina dei problemi di GitHub. Ti aiuteremo il prima possibile.