Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
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 pullil 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:
- Avviare il Portale aziendale. Non è necessario eseguire l'accesso.
- Seleziona il... Icona del menu.
- Selezionare Impostazioni.
- Scorrere fino all'impostazione denominata "Criteri di gestione".
- 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:
Se l'app integra MSAL o è necessario abilitare 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 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
ContentResolverun valore di errore (ad esempio,openOutputStreamgenereràFileNotFoundExceptionse 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
getPolicyForIdentitychiamata).
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.