Guida per sviluppatori SDK app Microsoft Intune per Android

Lo SDK per app di Microsoft Intune per Android consente di incorporare i criteri di protezione dell'app di Intune (noti anche come criteri MAM) nell'app Android Java/Kotlin nativa. Un'applicazione gestita da Intune è un'applicazione integrata con l'SDK per app di Intune. Gli amministratori di Intune possono distribuire facilmente i criteri di protezione delle app all'applicazione gestita da Intune quando Intune gestisce attivamente l'app.

Importante

Intune rilascia regolarmente aggiornamenti per l'SDK dell'app Intune. È consigliabile sottoscrivere gli aggiornamenti ai repository di Intune App SDK in modo da poter incorporare l'aggiornamento nel ciclo di rilascio del software e assicurarsi che le app supportino le impostazioni più recenti dei criteri di protezione delle app.

Pianifica di eseguire gli aggiornamenti obbligatori di Intune App SDK prima di ogni versione principale del sistema operativo per assicurarti che l'app continui a funzionare senza problemi poiché gli aggiornamenti del sistema operativo possono causare modifiche di rilievo. Se non esegui l'aggiornamento alla versione più recente prima di una versione principale del sistema operativo, potresti correre il rischio di riscontrare una modifica importante e/o di non essere in grado di applicare criteri di protezione delle app alla tua app.

Flusso di processo

Il diagramma seguente illustra il flusso di processo di Intune App SDK per Android:

Diagramma architettonico di alto livello per Microsoft Intune.

Obiettivi della fase

La guida contiene maggiori dettagli sull'architettura di Intune App SDK, informazioni sui passaggi di integrazione non comuni e altri contenuti utili.

L'SDK in modo più dettagliato

Sostituzioni di classi e metodi

Tramite gli strumenti di compilazione, l'SDK dell'app Intune tenta di ridurre al minimo il carico di integrazione degli sviluppatori Android. Prima degli strumenti di compilazione, gli sviluppatori dovevano eseguire manualmente tutte le sostituzioni.

Nota

Le app devono ora integrarsi con gli strumenti di compilazione dell'SDK, che eseguirà automaticamente tutte queste sostituzioni.

Le classi base di Android vengono sostituite con i rispettivi equivalenti MAM per consentire la gestione di Intune. Le classi SDK si trovano tra la classe base di Android e la versione derivata dell'app di tale classe. Ad esempio, un'attività di un'app potrebbe finire con una gerarchia di ereditarietà simile a: AppSpecificActivity extends MAMActivity extends .Activity Il livello MAM filtra le chiamate alle operazioni di sistema per offrire all'app una visualizzazione gestita del mondo.

Oltre alle classi di base, anche alcune classi che l'app potrebbe usare senza derivare da (ad esempio MediaPlayer) hanno equivalenti MAM obbligatori e alcune chiamate al metodo devono essere sostituite. La tabella seguente elenca molte delle sostituzioni MAM.

Classe base Android Sostituzione di Intune App SDK
android.app.Attività MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app. Applicazione MAMApplication
android.app.Dialog MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Fragment MAMFragment
android.app.IntentService MAMIntentService
android.app.LauncherActivity MAMLauncherActivity
android.app.ListActivity MAMListActivity
android.app.ListFragment MAMListFragment
android.app.NativeActivity MAMNativeActivity
android.app.PendingIntent MAMPendingIntent
android.app.Service MAMService
android.app.TabActivity MAMTabActivity
android.app.TaskStackBuilder MAMTaskStackBuilder
android.app.backup.BackupAgent MAMBackupAgent
android.app.backup.BackupAgentHelper MAMBackupAgentHelper
android.app.backup.FileBackupHelper MAMFileBackupHelper
android.app.backup.SharePreferencesBackupHelper MAMSharedPreferencesBackupHelper
android.app.job.JobService MAMJobService
android.content.BroadcastReceiver MAMBroadcastReceiver
android.content.ContentProvider MAMContentProvider
android.os.Binder MAMBinder (necessario solo se il raccoglitore non viene generato da un'interfaccia AILL (Interface Definition Language) Android)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPopupWindow
android.widget.TextView MAMTextView
android.widget.AutoCompleteTextView MAMAutoCompleteTextView
android.widget.CheckedTextView MAMCheckedTextView
android.widget.EditText MAMEditText
android.inputmethodservice.ExtractEditText MAMExtractEditText
android.widget.MultiAutoCompleteTextView MAMMultiAutoCompleteTextView
android.view.LayoutInflater MAMLayoutInflater
android.view.ViewGroup MAMViewGroup
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

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 con nome simile (in genere con suffisso con MAM) di cui è invece necessario eseguire l'override. Ad esempio, quando si deriva da MAMActivity, invece di eseguire l'override onCreate() e chiamare super.onCreate(), Activity è necessario eseguire l'override onMAMCreate() e chiamare super.onMAMCreate(). Il compilatore Java deve applicare le restrizioni finali per impedire l'override accidentale del metodo originale anziché dell'equivalente MAM.

Servizi di sistema di cui è stato eseguito il wrapping

Per alcune classi di servizio di sistema, è necessario chiamare un metodo statico su una classe wrapper MAM invece di richiamare direttamente il metodo desiderato sull'istanza del servizio. Ad esempio, una chiamata a getSystemService(ClipboardManager.class).getPrimaryClip() deve diventare una chiamata a MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Anche in questo caso, il plug-in di compilazione richiesto effettua automaticamente queste sostituzioni.

Classe Android Sostituzione di Intune App SDK
android.content.ClipboardManager MAMClipboard
android.content.ContentProviderClient MAMContentProviderClientManagement
android.content.ContentResolver MAMContentResolverManagement
android.content.pm.PackageManager MAMPackageManagement
android.app.DownloadManager MAMDownloadManagement
android.print.PrintManager MAMPrintManagement
android.view.View MAMViewManagement
android.view.DragEvent MAMDragEventManagement
android.view.LayoutInflater MAMLayoutInflaterManagement
android.app. NotificationManager MAMNotificationManagement
android.app.blob.BlobStoreManager MAMBlobStoreManager
android.app.blob.BlobStoreManager.Session MAMBlobStoreManager.Session

Alcune classi hanno la maggior parte dei loro metodi di cui è stato eseguito il wrapping, ad esempio ClipboardManager, ContentProviderClient, ContentResolver, e PackageManager mentre altre classi hanno solo uno o due metodi di cui è stato eseguito il wrapping, ad esempio DownloadManager, , PrintManager, PrintHelperNotificationManagerViewDragEvent, , e NotificationManagerCompat.

Registrazione MDM e MAM

Come illustrato in Registrazione e registrazione della Fase 4, l'SDK per app Intune "registrerà" gli account registrati dall'app in modo che l'account sia protetto con criteri. L'account viene gestito al termine della registrazione e i criteri MAM devono ora essere applicati a questo account.

Il termine "registrazione" può anche fare riferimento al processo avviato dall'utente finale per l'abilitazione della Gestione dispositivi (MDM). La registrazione MDM è completamente distinta dalla registrazione dei criteri di protezione delle app.

Un'app integrata nell'SDK può avere un account registrato per i criteri di protezione delle app senza che tale account sia registrato per la Gestione dispositivi. Analogamente, un utente può aver registrato un dispositivo per la Gestione dispositivi senza che alcun SDK sia integrato in app con account registrati per i criteri di protezione delle app.

In genere, quando gli sviluppatori e gli amministratori fanno riferimento alla registrazione, si riferiscono alla registrazione MDM, poiché la registrazione dei criteri di protezione delle app è in gran parte invisibile sia agli sviluppatori che agli utenti finali. Per altre informazioni sulla registrazione MDM, vedi Registrare i dispositivi Android .

Suggerimenti per l'integrazione

Informazioni sui log del Portale aziendale

I log del Portale aziendale contengono informazioni usate dai tecnici Microsoft per le indagini sui problemi. Alcuni dei log possono essere utili anche per gli sviluppatori che integrano l'SDK.

In particolare, il file DiagnosticsInfo-scrubbed.log contiene informazioni sulle app gestite da MAM e i dettagli dei criteri di MAM nella PolicyDB Information sezione. Ogni app gestita ha una voce nella PolicyDB Information sezione. È consigliabile cercare il nome del pacchetto dell'app qui per verificare che i criteri MAM siano destinati correttamente all'app. Se non vedi il nome del pacchetto della tua app qui, indica che all'account connesso non sono applicati i criteri MAM.

Per la descrizione di ogni impostazione dei criteri MAM, vedere Impostazioni dei criteri di protezione delle app Android in Microsoft Intune. Per una descrizione della modalità di visualizzazione di queste impostazioni nei log del Portale aziendale, vedere Esaminare i log di protezione delle app client. Quando i criteri di gestione di app di gestione di app Microsoft non vengono applicati come previsto, è consigliabile controllare i log del Portale aziendale o l'interfaccia utente di diagnostica, verificare che l'app sia gestita dai criteri di gestione di app di app Microsoft e verificare che le impostazioni dei criteri abbiano i valori previsti.

È possibile raccogliere i log del Portale aziendale in uno dei modi seguenti:

  • Tramite il Portale aziendale
    • Aprire l'app Portale aziendale
    • Seleziona il menu con i tre puntini nell'angolo in alto a destra
    • Selezionare Impostazioni
    • In Log di diagnostica, selezionare Salva log
    • Seguire la richiesta per scegliere la directory di output in cui salvare i log del Portale aziendale.
    • Usare adb shell pull il comando per eseguire il pull dei log dal dispositivo Android al computer locale.
  • [Usa Microsoft Edge per Android per accedere ai log delle app gestite]. Verrà visualizzata l'interfaccia utente per la raccolta dei log del Portale aziendale e la visualizzazione della diagnostica di MAM.
  • Chiama MAMPolicyManager.showDiagnostics(context) per visualizzare la stessa interfaccia utente per la raccolta dei log del Portale aziendale.

Test rapidi con criteri mutevoli

Durante lo sviluppo e il test dell'integrazione dell'app di Intune App SDK, è possibile modificare frequentemente le impostazioni dei criteri di protezione dell'app per l'utente di test.

Per impostazione predefinita, le app integrate eseguiranno il check-in con il servizio Intune per i criteri aggiornati ogni 30 minuti, quando attive. È possibile evitare questa attesa e forzare un check-in tramite il Portale aziendale:

  1. Avviare il Portale aziendale. Non è necessario eseguire l'accesso.
  2. Seleziona il... Icona del menu.
  3. Selezionare Impostazioni.
  4. Scorrere fino all'impostazione denominata "Criteri di gestione".
  5. Premere il pulsante Sincronizza.

In questo modo verrà pianificato immediatamente un check-in e verranno recuperati i criteri aggiornati destinati all'app e all'account.

Risoluzione dei problemi di migrazione ad AndroidX

Se è stato integrato l'SDK dell'app Intune prima di sfruttare AndroidX, è possibile che si verifichi un errore come questo durante la migrazione ad AndroidX:

incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar

Questi errori possono verificarsi perché l'app fa riferimento alle classi di supporto legacy dell'SDK. Le classi di supporto MAM eseguono il wrapping delle classi di supporto Android spostate in AndroidX. Per contrastare tali errori, sostituire tutti i riferimenti alle classi di supporto MAM con gli equivalenti AndroidX. Ciò può essere ottenuto rimuovendo prima le dipendenze della libreria di supporto MAM dai file di compilazione Gradle. Le linee in questione avranno un aspetto simile al seguente:

implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"

Quindi, correggere gli errori in fase di compilazione risultanti sostituendo tutti i riferimenti alle classi MAM nei pacchetti and com.microsoft.intune.mam.client.support.v4 con i com.microsoft.intune.mam.client.support.v7 loro equivalenti AndroidX. Ad esempio, i riferimenti a MAMAppCompatActivity dovrebbero essere cambiati in AndroidX's AppCompatActivity. Come discusso in precedenza, il plug-in/strumento di compilazione MAM riscriverà automaticamente le classi nelle librerie AndroidX con gli equivalenti MAM appropriati in fase di compilazione.

Limitazioni e Casi Speciali

Registrazione predefinita

L'applicazione può in alternativamente registrarsi per i criteri di protezione delle app tramite un processo semplificato denominato registrazione predefinita. Questa funzionalità è principalmente per supportare le app line-of-business private che non hanno MSAL integrato.

Avviso

La registrazione predefinita comporta compromessi significativi e non è consigliata. Le app che sfruttano la registrazione predefinita non supportano l'accesso condizionale, non traggono vantaggio da SSO con i servizi Microsoft e non possono essere usate da account non Intune. Se l'app viene spedita a un app store pubblico, la registrazione predefinita non è supportata.

La registrazione predefinita forzerà l'utente finale a installare il Portale aziendale e completare un flusso di registrazione MAM prima di consentire agli utenti di accedere all'applicazione.

Nota

La registrazione predefinita è compatibile con il cloud sovrano.

Abilitare la registrazione predefinita con la procedura seguente:

  1. Se l'app integra MSAL o è necessario abilitare SSO, configurare MSAL. In caso contrario, è possibile ignorare questo passaggio.

  2. Abilitare la registrazione predefinita aggiungendo il valore seguente nel manifesto sotto il <application> tag:

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Abilitare i criteri MAM necessari aggiungendo il valore seguente nel manifesto sotto il <application> tag:

    <meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
    

Processi isolati

Intune App SDK non può applicare protezioni ai processi isolati. Il supporto per i processi isolati (android:isolatedProcess) richiede l'aggiunta del tag metadati seguente.

Avviso

Aggiungendo questi metadati, l'applicazione dichiara che il processo isolato non può esporre i dati dell'organizzazione. La tua applicazione è responsabile di garantire questo.

<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />

Restrizioni Trascrivi schermata personalizzate

Se l'app contiene una funzionalità di acquisizione dello schermo personalizzata che ignora la restrizione a livello FLAG_SECURE di WindowAndroid, è necessario controllare i criteri di acquisizione dello schermo prima di consentire l'accesso completo alla funzionalità. Ad esempio, se l'applicazione utilizza un motore di rendering personalizzato per eseguire il rendering della visualizzazione corrente in un file PNG, dovete prima controllare AppPolicy.getIsScreenCaptureAllowed().

Se l'app non contiene funzionalità di acquisizione dello schermo personalizzate o di terze parti, non è necessario eseguire alcuna azione per limitare le acquisizioni dello schermo. I criteri di acquisizione dello schermo vengono applicati automaticamente a livello per Window tutte le app integrate con MAM.

Qualsiasi tentativo da parte del sistema operativo o di un'altra app di acquisire un Window nella tua app verrà bloccato in base alle esigenze. Ad esempio, se un utente tenta di acquisire lo schermo dell'app tramite le funzionalità di screenshot o registrazione dello schermo integrate di Android, l'acquisizione verrà automaticamente limitata senza la partecipazione dell'app.

Limitazioni dell'applicazione dei criteri

  • Uso dei resolver di contenuto: i criteri di Intune "trasferisci o ricevi" possono bloccare o bloccare parzialmente l'uso di un resolver di contenuto per accedere al provider di contenuti in un'altra app. In questo modo i metodi restituiscono null o generano ContentResolver un valore di errore (ad esempio, openOutputStream genererà FileNotFoundException se bloccati). L'app può determinare se un errore di scrittura dei dati tramite un resolver di contenuto è stato causato o potrebbe essere causato dai criteri effettuando la chiamata:

    MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
    

    Oppure, se non c'è nessuna attività associata:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    In questo secondo caso, le app con più identità devono avere cura di impostare l'identità del thread in modo appropriato (o passare un'identità esplicita a una getPolicyForIdentity chiamata).

Servizi esportati

Il file AndroidManifest.xml incluso in Intune App SDK contiene MAMNotificationReceiverService, che deve essere un servizio esportato per consentire all'Portale aziendale di inviare notifiche a un'app gestita. Il servizio controlla il chiamante per verificare che solo il Portale aziendale sia autorizzato a inviare notifiche.

Limitazioni della riflessione

Alcune delle classi di base MAM (ad esempio, MAMActivity, MAMDocumentsProvider) contengono metodi (basati sulle classi di base Android originali) che usano parametri o tipi restituiti presenti solo al di sopra di determinati livelli API. Per questo motivo, potrebbe non essere sempre possibile usare la reflection per enumerare tutti i metodi dei componenti dell'app. Questa restrizione non è limitata a MAM, è la stessa restrizione che si applicherebbe se l'app stessa implementasse questi metodi dalle classi di base di Android.

Robolectric

Il test del comportamento di Intune App SDK in Robolectric non è supportato. Esistono problemi noti durante l'esecuzione dell'SDK in Robolectric a causa di comportamenti presenti in Robolectric che non imitano accuratamente quelli nei dispositivi o negli emulatori reali.

Se è necessario testare l'applicazione in Robolectric, la soluzione alternativa consigliata è spostare la logica della classe dell'applicazione in un helper e produrre l'apk di unit test con una classe dell'applicazione che non eredita da MAMApplication.