Guida per sviluppatori di Microsoft Intune App SDK per Android
Microsoft Intune App SDK per Android consente di incorporare i criteri di protezione delle app di Intune (noti anche come criteri APP o MAM) nell'app Java/Kotlin Android nativa. Un'applicazione gestita da Intune è integrata con Intune App SDK. Gli amministratori di Intune possono distribuire facilmente i criteri di protezione delle app nell'app gestita da Intune quando Intune gestisce attivamente l'app.
Importante
Intune rilascia regolarmente gli aggiornamenti a Intune App SDK. È consigliabile sottoscrivere i repository di Intune App SDK per gli aggiornamenti in modo che sia possibile incorporare l'aggiornamento nel ciclo di rilascio dello sviluppo software e assicurarsi che le app supportano le impostazioni più recenti dei criteri di protezione delle app.
Pianificare l'esecuzione degli aggiornamenti obbligatori di Intune App SDK prima di ogni versione principale del sistema operativo per garantire che l'app continui a essere eseguita senza problemi perché gli aggiornamenti del sistema operativo possono causare modifiche di rilievo. Se non si esegue l'aggiornamento alla versione più recente prima di una versione principale del sistema operativo, è possibile che si verifichi una modifica di rilievo e/o che non sia possibile applicare criteri di protezione delle app all'app.
Flusso di processo
Il diagramma seguente fornisce il flusso di processo di Intune App SDK per Android:
Obiettivi di 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 maggiore dettaglio
Sostituzioni di classi e metodi
Tramite gli strumenti di compilazione, Intune App SDK 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 eseguiranno automaticamente tutte queste sostituzioni.
Le classi base Android vengono sostituite con i rispettivi equivalenti MAM per abilitare la gestione di Intune.
Le classi SDK risiedono tra la classe base Android e la versione derivata dell'app di tale classe.
Ad esempio, un'attività dell'app potrebbe avere una gerarchia di ereditarietà simile alla seguente: AppSpecificActivity
estende MAMActivity
Activity
.
Il livello MAM filtra le chiamate alle operazioni di sistema per offrire alla tua app una visione gestita del mondo.
Oltre alle classi di base, alcune classi che l'app potrebbe usare senza derivare da (ad esempio MediaPlayer
) hanno anche equivalenti MAM necessari 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.Activity | MAMActivity |
android.app.ActivityGroup | MAMActivityGroup |
android.app.AliasActivity | MAMAliasActivity |
android.app.Application | 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 binder non viene generato da un'interfaccia AIDL (Android Interface Definition Language) |
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 denominato simile (in genere con MAM
suffisso ) di cui è 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 incapsulati
Per alcune classi del servizio di sistema, è necessario chiamare un metodo statico in una classe wrapper MAM invece di richiamare direttamente il metodo desiderato nell'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 esegue 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 |
Per alcune classi è stato eseguito il wrapping della maggior parte dei metodi, ad esempio , ClipboardManager
, e mentre per altre classi è stato eseguito il wrapping di uno o due metodi, ad esempio , PrintManager
DownloadManager
, PrintHelper
, View
, DragEvent
NotificationManager
e .NotificationManagerCompat
PackageManager
ContentResolver
ContentProviderClient
Registrazione MDM e MAM
Come illustrato in Registrazione e registrazione della fase 4, Intune App SDK "registrerà" gli account registrati dall'app in modo che l'account sia protetto con i criteri. L'account viene gestito dopo il completamento 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 di Gestione dispositivi (MDM). La registrazione MDM è completamente separata 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 venga registrato per Gestione dispositivi. Analogamente, un utente può aver registrato un dispositivo per Gestione dispositivi senza avere app integrate nell'SDK con account registrati per i criteri di protezione delle app.
In genere, quando sviluppatori e amministratori fanno riferimento alla registrazione, fanno riferimento alla registrazione MDM, poiché la registrazione dei criteri di protezione delle app è in gran parte invisibile sia agli sviluppatori che agli utenti finali. Per altri dettagli sulla registrazione MDM, vedere Registrare 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 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 sui dettagli dei criteri MAM nella PolicyDB Information
sezione .
Ogni app gestita include 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 il nome del pacchetto dell'app non viene visualizzato qui, indica che l'account connesso non ha i criteri MAM applicati.
Per una descrizione di ogni impostazione dei criteri MAM, vedere Impostazioni dei criteri di protezione delle app Android in Microsoft Intune. Per una descrizione di come queste impostazioni verranno visualizzate nei log del portale aziendale, vedere Esaminare i log di protezione delle app client. Quando i criteri MAM 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 MAM 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
- Selezionare il menu a tre punti nell'angolo in alto a destra
- Seleziona impostazioni
- In Log di diagnostica selezionare Salva log
- Seguire la richiesta per scegliere la directory di output per salvare i log del portale aziendale.
- Usare il
adb shell pull
comando per eseguire il pull dei log dal dispositivo Android al computer locale.
- [Usare 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 MAM.
- Chiama
MAMPolicyManager.showDiagnostics(context)
per visualizzare la stessa interfaccia utente per la raccolta dei log del portale aziendale.
Test rapidi con la modifica dei criteri
Durante lo sviluppo e il test dell'integrazione dell'app con Intune App SDK, è possibile modificare spesso le impostazioni dei criteri di protezione delle app per l'utente di test.
Per impostazione predefinita, le app integrate archiviano con il servizio Intune i criteri aggiornati ogni 30 minuti, quando sono attive. È possibile evitare questa attesa e forzare l'archiviazione tramite il portale aziendale:
- Avviare il portale aziendale. Non è necessario accedere.
- Selezionare il ... icona del menu.
- Selezionare Impostazioni.
- Scorrere fino all'impostazione denominata "Criteri di gestione".
- Premere il pulsante Sincronizza.
Verrà immediatamente pianificato un check-in e verranno recuperati i criteri aggiornati destinati all'app e all'account.
Risoluzione dei problemi relativi alla migrazione di AndroidX
Se in Intune App SDK è stato integrato prima di sfruttare AndroidX, potrebbe verificarsi un errore simile al seguente 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 combattere tali errori, sostituire tutti i riferimenti alle classi di supporto MAM con gli equivalenti AndroidX. A tale scopo, rimuovere prima di tutto le dipendenze della libreria di supporto MAM dai file di compilazione di Gradle. Le righe 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"
Correggere quindi gli errori in fase di compilazione risultanti sostituendo tutti i riferimenti alle classi MAM nei com.microsoft.intune.mam.client.support.v7
pacchetti e com.microsoft.intune.mam.client.support.v4
con gli equivalenti AndroidX.
Ad esempio, i riferimenti a devono essere modificati in AndroidX.For example, references to MAMAppCompatActivity
should be changed to AndroidX's AppCompatActivity
.
Come illustrato in precedenza, lo strumento/plug-in 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ò eseguire la registrazione alternativa per i criteri di protezione delle app tramite un processo semplificato denominato registrazione predefinita. Questa funzionalità consente principalmente di supportare app line-of-business private che non hanno integrato MSAL.
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 dall'accesso SSO con i servizi Microsoft e non possono essere usate da account non Intune. Se l'app viene fornita a un app store pubblico, la registrazione predefinita non è supportata.
La registrazione predefinita forza l'utente finale a installare il portale aziendale e a completare un flusso di registrazione MAM prima di consentire agli utenti di accedere all'applicazione.
Nota
La registrazione predefinita è in grado di riconoscere il cloud sovrano.
Abilitare la registrazione predefinita seguendo questa procedura:
Se l'app integra MSAL o è necessario abilitare l'accesso SSO, configurare MSAL. In caso contrario, è possibile ignorare questo passaggio.
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" />
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 meta-data riportato di seguito.
Avviso
Aggiungendo questi meta-dati, l'applicazione dichiara che il processo isolato non può esporre i dati dell'organizzazione. L'applicazione è responsabile della garanzia.
<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />
Restrizioni personalizzate per l'acquisizione dello schermo
Se l'app contiene una funzionalità di acquisizione dello schermo personalizzata che ignora la restrizione a livello FLAG_SECURE
di Window
Android, è necessario controllare i criteri di acquisizione dello schermo prima di consentire l'accesso completo alla funzionalità.
Ad esempio, se l'app usa un motore di rendering personalizzato per eseguire il rendering della visualizzazione corrente in un file PNG, devi prima controllare AppPolicy.getIsScreenCaptureAllowed()
.
Se l'app non contiene funzionalità di acquisizione dello schermo personalizzate o di terze parti, non è necessario intraprendere alcuna azione per limitare le acquisizioni dello schermo.
I criteri di acquisizione dello schermo vengono applicati automaticamente a Window
livello di tutte le app integrate MAM.
Tutti i tentativi del sistema operativo o di un'altra app di acquisire un Window
oggetto nell'app verranno bloccati in base alle esigenze.
Ad esempio, se un utente tenta di acquisire lo schermo dell'app tramite le funzionalità predefinite di screenshot o registrazione dello schermo di Android, l'acquisizione verrà automaticamente limitata senza la partecipazione dell'app.
Limitazioni di imposizione dei criteri
Uso dei resolver di contenuto: i criteri di "trasferimento o ricezione" di Intune possono bloccare o bloccare parzialmente l'uso di un resolver di contenuto per accedere al provider di contenuto in un'altra app. In questo modo
ContentResolver
i metodi restituiscono null o generano un valore di errore( ad esempio,openOutputStream
genereràFileNotFoundException
se bloccato). L'app può determinare se un errore di scrittura dei dati tramite un resolver di contenuto è stato causato da criteri (o da criteri) eseguendo la chiamata:MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
o se non è presente alcuna attività associata:
MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
In questo secondo caso, le app multi-identità devono prestare attenzione a 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 al portale aziendale di inviare notifiche a un'app gestita. Il servizio controlla il chiamante per assicurarsi che solo il portale aziendale sia autorizzato a inviare notifiche.
Limitazioni di reflection
Alcune classi di base MAM (ad esempio, MAMActivity
, MAMDocumentsProvider
) contengono metodi (basati sulle classi di base Android originali) che usano tipi di parametro o 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 Android.
Robolectric
Il test del comportamento di Intune App SDK in Robolectric non è supportato. Esistono problemi noti che eseguono l'SDK in Robolectric a causa di comportamenti presenti in Robolectric che non simulano accuratamente quelli in dispositivi o emulatori reali.
Se è necessario testare l'applicazione in Robolectric, la soluzione consigliata consiste nello spostare la logica della classe dell'applicazione in un helper e produrre l'apk di unit testing con una classe di applicazione che non eredita da MAMApplication.