Associazioni Xamarin di Microsoft Intune App SDK
Importante
Xamarin.Forms si è evoluto in .NET Multi-platform App UI (MAUI). È necessario eseguire la migrazione dei progetti Xamarin esistenti a .NET MAUI. Per altre informazioni sull'aggiornamento di progetti Xamarin a .NET, vedere la documentazione relativa all'aggiornamento da Xamarin a .NET & .NET MAUI .
Il supporto di Xamarin è terminato a partire dal 1° maggio 2024 per tutti gli SDK Xamarin, inclusi i binding Xamarin.Forms e Xamarin di Intune App SDK. Per il supporto di Intune nelle piattaforme Android e iOS, vedere Intune App SDK per .NET MAUI - Androide Microsoft Intune App SDK per MAUI.iOS.
Panoramica
I binding Xamarin di Intune App SDK abilitano i criteri di protezione delle app di Intune nelle app iOS e Android compilate con Xamarin. Le associazioni consentono agli sviluppatori di compilare facilmente le funzionalità di protezione delle app di Intune nell'app basata su Xamarin.
Le associazioni Xamarin di Microsoft Intune App SDK consentono di incorporare i criteri di protezione delle app di Intune (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 di Intune
- MAM di Intune
- Dispositivi registrati MDM di Intune
- Dispositivi registrati con EMM di terze parti
Le app Xamarin compilate con le associazioni Xamarin di Intune App SDK possono ora ricevere i criteri di protezione delle app di Intune sia nei dispositivi registrati per la gestione dei dispositivi mobili (MDM) di Intune 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 di Intune App SDK, si accettano tali condizioni di licenza. Se non li accetti, non usare il software.
Intune SDK si basa su Microsoft Authentication Library (MSAL) per gli scenari di autenticazione e avvio condizionale, che richiedono la configurazione delle app con l'ID Microsoft Entra.
Se l'applicazione è già configurata per l'uso di MSAL e ha un proprio ID client personalizzato usato per l'autenticazione con l'ID Microsoft Entra, assicurarsi che vengano seguiti i passaggi per concedere all'app Xamarin le autorizzazioni per il servizio Gestione applicazioni mobili (MAM) di Intune. Usare le istruzioni riportate nella sezione "Concedere all'app l'accesso al servizio Gestione app per dispositivi mobili di Intune" della guida introduttiva all'SDK di Intune.
Considerazioni sulla sicurezza
Per evitare potenziali attacchi di spoofing, divulgazione di informazioni e elevazione dei privilegi:
- Assicurarsi che lo sviluppo di app Xamarin venga eseguito in una stazione di lavoro sicura.
- Verificare che le associazioni provenino da un'origine Microsoft valida:
- Profilo NuGet di MS Intune App SDK
- Intune App SDK Xamarin GitHub Repository
- Configurare la configurazione di NuGet per il progetto in modo che consideri attendibili i pacchetti NuGet firmati e non modificati. Per altre informazioni , vedere Installazione di pacchetti firmati .
- Proteggere la directory di output che contiene l'app Xamarin. È consigliabile usare una directory a livello di utente per l'output.
Abilitazione dei criteri di protezione delle app di Intune nell'app per dispositivi mobili iOS
Importante
Intune rilascia regolarmente gli aggiornamenti a Intune App SDK. Controllare regolarmente le associazioni Xamarin di Intune App SDK per gli aggiornamenti e incorporare nel ciclo di versione dello sviluppo software per assicurarsi che le app supportano le impostazioni più recenti dei criteri di protezione delle app.
Aggiungere il pacchetto NuGet Microsoft.Intune.MAM.Xamarin.iOS al progetto Xamarin.iOS.
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 di Intune App SDK per iOS. È possibile ignorare il passaggio finale in quella sezione dell'esecuzione di IntuneMAMConfigurator, poiché questo strumento è incluso nel pacchetto Microsoft.Intune.MAM.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.
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;
Per iniziare a ricevere i criteri di protezione delle app, l'app deve registrarsi nel servizio MAM di 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 predefinite di Microsoft Entra 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 di Intune App SDK per iOS, oppure nel codice tramite le proprietà di override di 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;
Abilitazione dei criteri di protezione delle app di Intune nell'app per dispositivi mobili Android
- Aggiungere il pacchetto NuGet Microsoft.Intune.MAM.Xamarin.Android al progetto Xamarin.Android.
- Per un'app Xamarin.Forms, aggiungere anche il pacchetto NuGet Microsoft.Intune.MAM.Remapper.Tasks al progetto Xamarin.Android.
- Seguire i passaggi generali necessari per l'integrazione di 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 di 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 MAM
suffisso ) 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 primario di Intune
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.OnMAMCreate
seguente:
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>();
Integrazione di Xamarin.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
L'integrazione di Xamarin.Forms deve essere eseguita in aggiunta all'integrazione di Xamarin.Android descritta in precedenza. Il remapper si comporta in modo diverso per le app Xamarin.Forms, 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 createsealed
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 inpublic
. Se si esegue l'override di una di queste funzioni, sarà necessario modificare anche i modificatori di accesso per tali sostituzionipublic
.
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 di Intune SDK non supportano le app che usano un framework multipiattaforma come MvvmCross a causa di conflitti tra le classi MAM di MvvmCross e Intune. Anche se alcuni clienti potrebbero avere avuto successo con l'integrazione dopo aver spostato le proprie app in Xamarin.Forms normali, non forniamo indicazioni esplicite o plug-in per gli sviluppatori di app che usano MvvmCross.
App Portale aziendale
I binding Xamarin di Intune SDK si basano sulla presenza dell'app Portale aziendale android 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 i criteri di protezione delle app di Intune.
Per la protezione delle app senza registrazione del dispositivo, l'utente non è tenuto a registrare il dispositivo usando l'app Portale aziendale.
Supporto tecnico
Se l'organizzazione è un cliente di Intune esistente, collaborare con il rappresentante del supporto Tecnico Microsoft per aprire un ticket di supporto e creare un problema nella pagina dei problemi di GitHub. Ti aiuteremo il prima possibile.