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 si integra 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.
Nota
Questa guida è suddivisa in diverse fasi distinte. Per iniziare, rivedere Pianificare l'integrazione.
Fase 7: Funzionalità di partecipazione all'app
Obiettivi della fase
- Informazioni sulle funzionalità di partecipazione alle app offerte da Intune App SDK.
- Integrare le funzionalità di partecipazione all'app pertinenti per l'app e gli utenti.
- Testare l'integrazione di queste funzionalità.
Che cosa sono le "Funzionalità di partecipazione alle app"?
Questo processo di integrazione SDK tenta di ridurre al minimo la quantità di codice specifico dell'app che gli sviluppatori devono scrivere. Completando correttamente le fasi precedenti dell'integrazione dell'SDK, l'app ora applica la maggior parte delle impostazioni dei criteri di protezione delle app, ad esempio la crittografia dei file, le restrizioni di copia/incolla, il blocco degli screenshot e le restrizioni del trasferimento dei dati.
Tuttavia, alcune impostazioni richiedono che il codice specifico dell'app venga applicato correttamente. Queste impostazioni sono denominate funzionalità di partecipazione alle app. In genere, l'SDK non ha abbastanza contesto sul codice dell'applicazione o sullo scenario dell'utente finale per applicare automaticamente queste impostazioni e quindi si basa sugli sviluppatori per chiamare le API SDK in modo appropriato.
Le funzionalità di partecipazione alle app non sono necessariamente facoltative. A seconda delle funzionalità esistenti dell'app, queste funzionalità potrebbero essere necessarie. Per informazioni dettagliate, vedi Decisioni chiave per l'integrazione dell'SDK .
Le fasi precedenti di questa guida descrivono già diverse funzionalità di partecipazione alle app:
- Multi-identità come descritto nella Fase 5: Multi-identità.
- Configurazione dell'app come descritto nella Fase 6: Configurazione app.
Il resto di questa guida descrive il set rimanente di funzionalità di partecipazione all'app:
- Applica criteri che limitano il salvataggio o l'apertura di file dall'archiviazione locale o cloud.
- Applicare criteri che limitano il contenuto nelle notifiche.
- Applicare criteri che proteggono i dati di backup.
- Applicare i criteri che limitano l'acquisizione dello schermo (se l'app ha un codice di acquisizione dello schermo personalizzato).
- Supporto App Protection CA.
- Registrati per ricevere le notifiche dall'SDK.
- Applicare temi dell'applicazione personalizzati.
- Usare certificati attendibili di Intune, garantendo la catena di attendibilità agli endpoint locali.
Partecipazione alle app Nozioni di base sulle funzionalità
L'interfaccia AppPolicy contiene molti metodi che informano l'app se determinate azioni sono consentite.
La maggior parte delle funzionalità di partecipazione alle app include:
- Identificare il punto del codice dell'app in cui verificare se è consentita un'azione.
- Chiamata di un
AppPolicymetodo per verificare se è consentita un'azione, in base ai criteri attualmente configurati. - A seconda del risultato, consentendo il completamento dell'azione o modificando il comportamento dell'app quando l'azione viene bloccata.
Per recuperare un'istanza AppPolicy , utilizzare uno dei metodi MAMPolicyManager , ad esempio getPolicy(final Context context) o getPolicyForIdentityOID(final String oid).
Metodi informativi in AppPolicy
Non tutti i metodi sono AppPolicy associati a una funzionalità di partecipazione all'app.
Alcuni metodi sono informativi e forniscono all'app i dati sui criteri attualmente configurati, anche se tali criteri vengono applicati automaticamente dall'SDK.
Questi metodi esistono per offrire all'app l'opportunità di presentare esperienze utente personalizzate quando vengono configurati criteri specifici.
Esempio: determinare se gli screenshot sono bloccati
Se l'app dispone di un controllo che consente all'utente di acquisire uno screenshot, è consigliabile disabilitare o nascondere tale controllo se i criteri di protezione delle app bloccano gli screenshot.
L'app può controllare chiamando MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().
Criteri per limitare il trasferimento dei dati tra le app e le posizioni di archiviazione del dispositivo o del cloud
Molte app consentono all'utente finale di salvare dati o aprirli da servizi di archiviazione file locali o cloud. Intune App SDK consente agli amministratori IT di proteggersi dall'ingresso e dalla perdita di dati, limitando la posizione in cui le app possono salvare e aprire i dati.
Nota
Se l'app consente il salvataggio in posizioni personali o cloud direttamente dall'app o consente l'apertura dei dati direttamente nell'app, è necessario implementare questa funzionalità di partecipazione all'app di Intune App SDK** per consentire agli amministratori IT di bloccare il salvataggio e l'apertura.
Salvataggio nel dispositivo o nello spazio di archiviazione nel cloud
L'API getIsSaveToLocationAllowedForOID consente all'app di sapere se è consentito il salvataggio in determinate posizioni per una determinata identità, in base al criterio configurato:
MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);
Per determinare se l'app deve implementare il getIsSaveToLocationAllowedForOID controllo, determinare se l'app supporta l'uscita dei dati esaminando la tabella seguente:
service Parametro: SaveLocation Valore enumerazione |
Caso d'uso | OID associato |
|---|---|---|
ONEDRIVE |
L'app sta salvando i dati in OneDrive. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
SHAREPOINT |
L'app sta salvando i dati in SharePoint. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
BOX |
L'app sta salvando i dati su Box. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
LOCAL |
L'app salva i dati in una posizione di archiviazione esterna nel dispositivo che non è la risorsa di archiviazione privata dell'app. | Questa posizione di archiviazione non è considerata un servizio cloud e deve essere sempre usata con un null parametro OID. |
PHOTO_LIBRARY |
L'app salva i dati nell'archivio foto locale di Android. | L'archiviazione locale di foto non è considerata un servizio cloud e deve essere sempre usata con un null parametro OID. |
IMANAGE |
L'app sta salvando i dati su iManage. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
EGNYTE |
L'app sta salvando i dati su Egnyte. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
ACCOUNT_DOCUMENT |
L'app sta salvando i dati in una posizione associata a un account all'interno dell'app e non è una delle posizioni cloud specifiche in questa tabella. Usare questo percorso per determinare se i dati possono essere passati tra gli account all'interno di un'app con più identità. |
Un OID per un account utilizzato per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
OTHER |
L'app sta salvando i dati in un percorso non specificato in questa tabella e che non soddisfa i criteri per ACCOUNT_DOCUMENT. |
Non oid viene valutato per questa posizione e dovrebbe essere null. |
I Files inseriti in un'archiviazione privata dell'app, necessari per il funzionamento dell'app o scaricati temporaneamente per la visualizzazione, sono sempre consentiti; non c'è bisogno di controllaregetIsSaveToLocationAllowedForOID.
Verifica SaveLocation.LOCAL la presenza di
- Files salvati all'esterno dell'archivio app privato.
- Files scaricati in un'archiviazione privata dell'app che non sono necessari per il funzionamento dell'app (ad esempio, quando l'utente sceglie esplicitamente di scaricare nel dispositivo).
Nota
Quando si controllano i criteri di salvataggio, oid deve essere l'OID dell'account associato al servizio cloud in cui si sta salvando (questo account non è necessariamente uguale all'account proprietario del documento salvato).
Apertura dei dati da una posizione di archiviazione locale o nel cloud
L'API getIsOpenFromLocationAllowedForOID consente all'app di sapere se l'apertura da determinate posizioni è consentita per una determinata identità, in base ai criteri configurati:
MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);
Per determinare se l'app deve implementare il getIsOpenFromLocationAllowedForOID controllo, determinare se l'app supporta l'ingresso dei dati esaminando la tabella seguente:
location Parametro: OpenLocation Valore enumerazione |
Caso d'uso | OID associato |
|---|---|---|
ONEDRIVE_FOR_BUSINESS |
L'app sta aprendo i dati da OneDrive. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
SHAREPOINT |
L'app sta aprendo i dati da SharePoint. | Un OID per un account utilizzato sia per l'autenticazione del servizio cloud sia per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
CAMERA |
L'app sta aprendo i dati dalla fotocamera del dispositivo. | Un null valore perché la fotocamera del dispositivo non è un servizio cloud. |
LOCAL |
L'app sta aprendo i dati da una posizione di archiviazione esterna nel dispositivo che non è la risorsa di archiviazione privata dell'app. | Anche se l'archiviazione esterna non è un servizio cloud, è previsto un oid parametro perché indica la proprietà.* Per i file con tag di identità: oid Deve essere l'identità del proprietario del file.* Per i file senza tag di identità: oid dovrebbe essere null. |
PHOTO_LIBRARY |
L'app sta aprendo i dati dall'archivio foto locale di Android. | L'archiviazione locale di foto non è considerata un servizio cloud e deve essere sempre usata con un null parametro OID. |
ACCOUNT_DOCUMENT |
L'app sta aprendo i dati da una posizione associata a un account all'interno dell'app e non è una delle posizioni cloud specifiche in questa tabella. Usare questo percorso per determinare se i dati possono essere passati tra gli account all'interno di un'app con più identità. |
Un OID per un account utilizzato per l'autenticazione Microsoft Entra. Se l'account non esiste o se l'OID non è noto, usare null. |
OTHER |
L'app sta aprendo i dati da una posizione non specificata in questa tabella e che non soddisfa i criteri per ACCOUNT_DOCUMENT. |
Non oid viene valutato per questa posizione e dovrebbe essere null. |
Nota
Quando si controlla il criterio di apertura, oid deve essere l'OID dell'account associato al file o al servizio cloud da cui viene aperto (non necessariamente lo stesso dell'account che apre il documento).
Consiglio
Per praticità, l'SDK fornisce il metodo AppPolicy.isOpenFromLocalStorageAllowed che accetta un File parametro per un file nell'archiviazione locale.
Per l'applicazione dei criteri, questo metodo è funzionalmente identico alla chiamata AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) , ad eccezione del fatto che gestisce l'analisi del proprietario del oid file da File.
Finestra di dialogo Condivisione bloccata
L'SDK fornisce una finestra di dialogo per notificare all'utente quando i criteri MAM bloccano un'azione di trasferimento dei dati.
La finestra di dialogo dovrebbe essere visualizzata all'utente ogni volta che la getIsSaveToLocationAllowedForOID chiamata o getIsOpenFromLocationAllowedForOID API comporta il blocco dell'azione di salvataggio/apertura.
La finestra di dialogo visualizza un messaggio generico e ritorna alla chiamata Activity quando viene ignorata.
Per visualizzare la finestra di dialogo, aggiungere il codice seguente:
MAMUIHelper.showSharingBlockedDialog(currentActivity)
Consenti condivisione file
Se il salvataggio in posizioni di archiviazione pubbliche non è consentito, l'app deve comunque consentire all'utente di visualizzare i file scaricandoli nell'archivio privato dell'app e quindi aprendoli con la selezione di sistema.
Criterio per limitare il contenuto nelle notifiche
Per le app con identità singola, il comportamento predefinito di Intune App SDK tenta di bloccare tutte le notifiche quando i criteri di protezione delle app limitano le notifiche.
Il comportamento predefinito dell'SDK è limitato. L'SDK non può rispettare automaticamente il valore "Blocca dati organizzazione", che ha lo scopo di rimuovere solo il contenuto gestito dalle notifiche. Per le app con più identità, l'SDK non è in grado di determinare quali notifiche contengono contenuto gestito.
Se l'app visualizza notifiche e se è multi-identità e/o deve rispettare il valore "Blocca dati organizzazione", deve controllare i criteri di restrizione delle notifiche per l'account associato alla notifica prima di visualizzare la notifica.
Per determinare se il criterio viene applicato, effettuare la chiamata seguente:
NotificationRestriction notificationRestriction =
MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();
L'enumerazione restituita NotificationRestriction ha i valori seguenti:
NotificationRestriction Enumerazione |
Comportamento previsto dell'app |
|---|---|
BLOCKED |
L'app non deve mostrare alcuna notifica per l'account associato a questo criterio. Per le app con identità singola, l'SDK delle app Intune blocca automaticamente tutte le notifiche e non è richiesto alcun codice aggiuntivo. |
BLOCK_ORG_DATA |
L'app deve mostrare una notifica modificata che non contenga dati dell'organizzazione. |
UNRESTRICTED |
L'app dovrebbe mostrare tutte le notifiche. |
Se l'app non richiama getNotificationRestrictioncorrettamente , MAM SDK fa del suo meglio per limitare automaticamente le notifiche solo per le app con identità singola.
In questo caso, BLOCK_ORG_DATA viene trattato allo stesso modo di BLOCKED e la notifica non viene mostrata affatto.
Per un controllo più dettagliato, controllare il valore e modificare le notifiche delle getNotificationRestriction app in modo appropriato.
Criteri per la protezione dei dati di backup
L'SDK dell'app Intune può bloccare il caricamento dei dati nella funzionalità di backup e ripristino integrata di Android. Per ulteriori informazioni sul backup e il ripristino in Android, vedere la guida API Android e le modifiche introdotte in Android S / 12 in Modifica al backup e al ripristino.
Backup automatico per le app
A partire da Android M, Android fornisce backup completi automatici su Google Drive per le app, indipendentemente dall'API di destinazione dell'app.
Intune consente di usare tutte le funzionalità di backup automatico offerte da Android, inclusa la possibilità di definire regole personalizzate in XML, con indicazioni specifiche sull'integrazione di Intune per garantire la protezione dei dati.
Configurazione del comportamento di backup nel manifesto dell'app
Per impostazione predefinita, android:allowBackup è impostato su true come descritto in Abilitare e disabilitare il backup.
Se l'app non richiede funzionalità di backup e ripristino complete, impostare android:allowBackup su false.
In questo caso, non sono necessarie altre azioni e i dati aziendali rimangono all'interno dell'app.
Se l'app richiede funzionalità di backup e ripristino complete, impostarle android:allowBackup su true ed eseguire la procedura seguente:
Se l'app non usa il proprio personalizzato
BackupAgent, usare MAMBackupAgent predefinito per abilitare i backup completi automatici conformi ai criteri di Intune. Inserisci quanto segue nel manifesto dell'app:<application ... android:fullBackupOnly="true" android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent" ...> </application>Facoltativo. Se si implementa un personalizzato
BackupAgent, è necessario utilizzare MAMBackupAgent o MAMBackupAgentHelper. Vedere le sezioni seguenti. Prendere in considerazione il passaggio a MAMDefaultBackupAgent di Intune, descritto nel passaggio 1, che fornisce un facile backup su Android M e versioni successive.Quando si decide quale tipo di backup completo deve ricevere l'app (non filtrato, filtrato o nessuno), impostare l'attributo
android:fullBackupContentsutrue,falseoppure una risorsa XML nell'app.Quindi, è necessario copiare il valore nel
android:fullBackupContentcom.microsoft.intune.mam.FullBackupContenttag dei metadati e, per le app che supportano il formato di configurazione XML aggiunto nell'API 31, nel tag deicom.microsoft.intune.mam.DataExtractionRulesmetadati.Esempio 1: Se si desidera che l'app disponga di backup completi senza esclusioni, è necessario impostare gli attributi e i tag dei metadati su true:
<application ... android:fullBackupContent="true" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />Esempio 2: se si desidera che l'app utilizzi i backup automatici personalizzati
BackupAgente conformi ai criteri di Intune, è necessario impostare gli attributi e i tag dei metadati su false:<application ... android:fullBackupContent="false" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />Esempio 3: se desideri che la tua app disponga di backup completi in base alle regole personalizzate definite in un file XML, imposta l'attributo e il tag dei metadati sulla stessa risorsa XML:
<application ... android:fullBackupContent="@xml/my_full_backup_content_scheme" android:dataExtractionRules="@xml/my_data_extraction_rules_scheme" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
Backup chiave/valore
L'opzione di backup chiave/valore è disponibile per tutte le API 8+ e carica i dati dell'app nel servizio di backup Android. La quantità di dati per app è limitata a 5 MB. Se si usa il backup chiave/valore, è necessario usare un BackupAgentHelper o un BackupAgent.
BackupAgentHelper
BackupAgentHelper è più facile da implementare rispetto a BackupAgent sia in termini di funzionalità native Android che di integrazione di Intune MAM.
BackupAgentHelper consente allo sviluppatore di registrare interi file e preferenze condivise in un FileBackupHelper e SharedPreferencesBackupHelper (rispettivamente) che vengono quindi aggiunti a BackupAgentHelper al momento della creazione.
Seguire questa procedura per usare un BackupAgentHelper con Intune MAM:
Per utilizzare il backup multi-identità con un
BackupAgentHelper, seguire la guida di Android per estendere BackupAgentHelper.Chiedere alla classe di estendere l'equivalente MAM di BackupAgentHelper, FileBackupHelper e SharedPreferencesBackupHelper.
| Classe Android | Equivalente MAM |
|---|---|
BackupAgentHelper |
MAMBackupAgentHelper |
FileBackupHelper |
MAMFileBackupHelper |
SharedPreferencesBackupHelper |
MAMSharedPreferencesBackupHelper |
Seguendo queste linee guida è possibile eseguire correttamente il backup e il ripristino di più identità.
Agente di backup
Un BackupAgent consente di essere molto più espliciti sui dati di cui viene eseguito il backup. Poiché lo sviluppatore è responsabile dell'implementazione, sono necessari ulteriori passaggi per garantire un'adeguata protezione dei dati da Intune. Poiché la maggior parte del lavoro è su di te come sviluppatore, l'integrazione di Intune è leggermente più complessa.
Integrare MAM:
Leggere attentamente la guida di Android per il backup chiave/valore e in particolare l'estensione di BackupAgent per assicurarsi che l'implementazione di BackupAgent segua le linee guida di Android.
Chiedere alla classe di estendere MAMBackupAgent.
Backup multi-identità:
Prima di iniziare il backup, verificare che il backup dei file o dei buffer di dati di cui si intende eseguire il backup sia consentito dall'amministratore IT in scenari con più identità. Usare
isBackupAllowedin MAMFileProtectionManager e MAMDataProtectionManager per determinare questo comportamento. Se non è possibile eseguire il backup del file o del buffer di dati, non è consigliabile includerlo nel backup.Ad un certo punto durante il backup, se si desidera eseguire il backup delle identità per i file archiviati nel passaggio 1, è necessario chiamare
backupMAMFileIdentity(BackupDataOutput data, File … files)con i file da cui si prevede di estrarre i dati. Questo metodo crea automaticamente nuove entità di backup e le scrive nell'appBackupDataOutputper te. Queste entità vengono consumate automaticamente al momento del ripristino.
Ripristino di più identità: La guida al backup dei dati specifica un algoritmo generale per il ripristino dei dati dell'applicazione e fornisce un esempio di codice nella sezione Estensione di BackupAgent . Per eseguire correttamente il ripristino di più identità, è necessario seguire la struttura generale fornita in questo esempio di codice con particolare attenzione ai punti seguenti:
Devi usare un
while(data.readNextHeader())ciclo * per passare attraverso le entità di backup.Devi chiamare
data.skipEntityData()sedata.getKey()non corrisponde alla chiave che hai scritto inonBackup. Senza questo passaggio, i ripristini potrebbero non riuscire.Evitare di tornare mentre si consumano le entità di
while(data.readNextHeader())backup nel costrutto *, perché in questo caso tutte le entità che scriviamo automaticamente vengono perse.
- Dov'è
datail nome della variabile locale per MAMBackupDataInput che l'app riceve al momento del ripristino.
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().
Nota
Se l'app non contiene funzionalità di acquisizione dello schermo personalizzate o non Microsoft, non è necessaria 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 viene 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 viene automaticamente limitata senza la partecipazione dell'app.
Supporto della CA di protezione delle app
La CA (Conditional Access) di Protezione delle app, nota anche come CA basata su app, limita l'accesso alle risorse. I criteri di protezione delle app di Intune devono gestire l'applicazione prima che possa accedere a queste risorse. Microsoft Entra ID applica questo criterio richiedendo all'app di registrarsi e di essere gestita dai criteri di protezione delle app di Intune prima di concedere un token per accedere a una risorsa protetta dall'accesso condizionale.
Nota
Il supporto CA per la protezione delle app richiede Libreria di Autenticazione Microsoft (MSAL) versione 1.0.0 o successiva.
Gestire la non conformità con MSAL
Quando l'app acquisisce un token per un account, la libreria MSAL potrebbe restituire o generare un MsalIntuneAppProtectionPolicyRequiredException per indicare la non conformità con la gestione dei criteri di protezione delle app.
È possibile estrarre più parametri dall'eccezione per l'uso nella correzione della conformità (vedere MAMComplianceManager).
Al termine della correzione, l'app può ritentare l'acquisizione del token tramite MSAL.
MAMComplianceManager
L'interfaccia MAMComplianceManager viene usata quando viene ricevuto l'errore richiesto dai criteri da MSAL.
Contiene il metodo [remediateCompliance] che è necessario chiamare per tentare di mettere l'app in uno stato conforme.
È possibile ottenere un riferimento al MAMComplianceManager seguente:
MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);
// make use of mgr
L'istanza MAMComplianceManager restituita è garantita per non essere null.
package com.microsoft.intune.mam.policy;
public interface MAMComplianceManager {
void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}
Il remediateCompliance() metodo tenta di gestire l'app per soddisfare le condizioni affinché Microsoft Entra ID conceda il token richiesto.
I primi quattro parametri possono essere estratti dall'eccezione ricevuta dal metodo MSAL AuthenticationCallback.onError() .
Il parametro finale è un valore booleano che controlla se un'esperienza utente viene visualizzata durante il tentativo di conformità.
remediateCompliance Visualizza una semplice finestra di dialogo di stato del blocco in modo che le app non debbano mostrare esperienze personalizzate durante questa operazione.
Questa finestra di dialogo viene visualizzata solo mentre è in corso la correzione della conformità. Non visualizza il risultato finale.
L'app può registrare un ricevitore per la COMPLIANCE_STATUS notifica per gestire l'esito positivo o negativo del tentativo di correzione della conformità.
Per altri dettagli, vedere Notifiche sullo stato di conformità .
remediateCompliance() potrebbe avviare una registrazione MAM come parte dello stabilire la conformità.
L'app potrebbe ricevere una notifica di registrazione se ha registrato un ricevitore di notifica per le notifiche di registrazione.
Il metodo registrato MAMServiceAuthenticationCallback dell'app è acquireToken() chiamato per ottenere un token per la registrazione.
acquireToken() viene chiamato prima che l'app acquisisca il proprio token. È possibile che tutte le attività di contabilità o creazione di account eseguite dall'app dopo un'acquisizione di token riuscita non siano ancora state eseguite.
In questo caso, il callback deve essere in grado di acquisire un token.
Se non è possibile restituire un token da acquireToken(), il tentativo di correzione della conformità avrà esito negativo.
Se in seguito si chiama updateToken con un token valido per la risorsa richiesta, la correzione della conformità riprende immediatamente con il token specificato.
Nota
L'acquisizione automatica del token è ancora possibile perché l'utente è già stato guidato a installare il broker e registrare il dispositivo prima acquireToken() che si verifichi l'eccezione MsalIntuneAppProtectionPolicyRequiredException .
Questo processo comporta che il broker abbia un token di aggiornamento valido nella cache, che consente al broker di acquisire il token richiesto automaticamente.
Ecco un esempio che riceve l'errore AuthenticationCallback.onError() richiesto dai criteri nel metodo e chiama MAMComplianceManager per gestire l'errore.
public void onError(@Nullable MsalException exc) {
if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {
final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
(MsalIntuneAppProtectionPolicyRequiredException) ex;
final String upn = policyRequiredException.getAccountUpn();
final String aadId = policyRequiredException.getAccountUserId();
final String tenantId = policyRequiredException.getTenantId();
final String authority = policyRequiredException.getAuthorityURL();
MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
}
}
Notifiche sullo stato di conformità
Se l'app si registra per le notifiche di tipo COMPLIANCE_STATUS, il sistema invia a MAMComplianceNotification per informare l'app dello stato finale del tentativo di correzione della conformità.
Per informazioni dettagliate sulla registrazione, vedi Registrazione per le notifiche dall'SDK .
public interface MAMComplianceNotification extends MAMUserNotification {
MAMCAComplianceStatus getComplianceStatus();
String getComplianceErrorTitle();
String getComplianceErrorMessage();
}
Il getComplianceStatus() metodo restituisce il risultato del tentativo di correzione della conformità come valore dall'enumerazione [MAMCAComplianceStatus].
| Codice di stato | Spiegazione |
|---|---|
UNKNOWN |
Stato sconosciuto. Questo stato potrebbe indicare un motivo di errore imprevisto. Altre informazioni sono disponibili nei log del Portale aziendale. |
COMPLIANT |
La correzione della conformità è riuscita e l'app è ora conforme ai criteri. L'acquisizione del token MSAL deve essere ritentata. |
NOT_COMPLIANT |
Il tentativo di correggere la conformità non è riuscito. L'app non è conforme e l'acquisizione del token MSAL non deve essere ritentata fino a quando la condizione di errore non viene corretta. Include MAMComplianceNotification informazioni aggiuntive sull'errore. |
SERVICE_FAILURE |
Si è verificato un errore durante il tentativo di recuperare i dati di conformità dal servizio Intune. Altre informazioni sono disponibili nei log del Portale aziendale. |
NETWORK_FAILURE |
Si è verificato un errore durante la connessione al servizio Intune. L'app deve riprovare l'acquisizione del token quando viene ripristinata la connessione di rete. |
CLIENT_ERROR |
Il tentativo di correggere la conformità non è riuscito a causa di un problema correlato al client, ad esempio token utente mancante o non corretto. Include MAMComplianceNotification altre informazioni sull'errore. |
PENDING |
Il tentativo di correggere la conformità ha esito negativo perché il servizio non invia la risposta di stato prima della scadenza del limite di tempo. L'app dovrebbe riprovare l'acquisizione del token in un secondo momento. |
COMPANY_PORTAL_REQUIRED |
Il Portale aziendale deve essere installato nel dispositivo affinché la correzione della conformità abbia esito positivo. Se è già installata, è necessario riavviare l'app. Una finestra di dialogo chiede all'utente di riavviare l'app. |
Se lo stato di conformità è MAMCAComplianceStatus.COMPLIANT, l'app deve riavviare l'acquisizione del token originale (per la propria risorsa).
Se il tentativo di correzione della conformità non è riuscito, i getComplianceErrorTitle() metodi AND getComplianceErrorMessage() restituiscono stringhe localizzate che l'app può visualizzare all'utente finale, se lo desidera.
L'app non è in grado di risolvere la maggior parte dei casi di errore. In generale, non eseguire la creazione dell'account o l'accesso e consentire all'utente di riprovare in un secondo momento.
Se un errore è persistente, i log del Portale aziendale potrebbero aiutare a determinarne la causa. L'utente finale può inviare i log. Per altre informazioni, vedere Caricare e inviare log via e-mail.
Di seguito è riportato un esempio di registrazione di un ricevitore usando una classe anonima per implementare l'interfaccia MAMNotificationReceiver:
final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
public boolean onReceive(MAMNotification notification) {
if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
// take appropriate action based on complianceNotification.getComplianceStatus()
// unregister this receiver if no longer needed
notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
}
return true;
}
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);
Nota
È necessario registrare il destinatario della notifica prima della chiamata remediateCompliance() per evitare una race condition che potrebbe comportare la mancata ricezione della notifica.
Dichiarazione del supporto per la CA di protezione delle app
Quando l'app è pronta per gestire la correzione dell'autorità di certificazione dell'app, è possibile indicare a Microsoft Identity che l'app è pronta per l'app CA. Per eseguire questa operazione nell'applicazione MSAL, compilare il client pubblico con le funzionalità client di "protapp"
{
"client_id" : "[YOUR_CLIENT_ID]",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "[YOUR_REDIRECT_URI]",
"multiple_clouds_supported":true,
"broker_redirect_uri_registered": true,
"account_mode": "MULTIPLE",
"client_capabilities": "protapp",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount"
}
}
]
}
Una volta completati i passaggi, passare a Convalida della CA di protezione delle app.
Note di implementazione
Nota
Il metodo dell'app MAMServiceAuthenticationCallback.acquireToken() deve passare false affinché il forceRefresh flag a acquireTokenSilentAsync().
AcquireTokenSilentParameters acquireTokenSilentParameters =
builder.withScopes(Arrays.asList(scopes))
.forceRefresh(false)
.build();
acquireTokenSilentAsync(acquireTokenSilentParameters);
Nota
Se si desidera mostrare un'esperienza utente di blocco personalizzata durante il tentativo di correzione, è necessario passare false per il parametro showUX a remediateCompliance().
È necessario assicurarsi di mostrare l'esperienza utente e registrare il listener di notifica prima di chiamare remediateCompliance().
In questo modo si evita una race condition in cui la notifica potrebbe non essere rilevata se remediateCompliance() non riesce rapidamente.
Ad esempio, il onCreate() metodo or onMAMCreate() di una sottoclasse Activity è il luogo ideale per registrare il listener di notifica e quindi chiamare remediateCompliance().
I parametri per remediateCompliance() possono essere passati alla tua esperienza utente come extra dell'intento.
Quando viene ricevuta la notifica sullo stato di conformità, è possibile visualizzare il risultato o completare l'attività.
Nota
remediateCompliance() Registra l'account e tenta la registrazione. Una volta acquisito il token principale, la chiamata registerAccountForMAM() non è necessaria, ma non c'è nulla di male nel farlo.
D'altra parte, se l'app non riesce ad acquisire il token e vuole rimuovere l'account utente, deve chiamare unregisterAccountForMAM() per rimuovere l'account e impedire i tentativi di registrazione in background.
Registrati per le notifiche dall'SDK
La guida di Intune App SDK illustra diversi scenari in cui potrebbe essere necessario registrare l'app per le notifiche dall'SDK, ad esempio:
- Gestione
WRONG_USERdi app con più identità (vedere Identità gestite e non gestite) - Gestione di app con più identità (vedere Protezione del buffer dei
MANAGEMENT_REMOVEDdati). - Gestione
WIPE_USER_DATAdi app con più identità oWIPE_USER_AUXILIARY_DATA(vedere Cancellazione selettiva). - App che implementano la gestione della
REFRESH_APP_CONFIGconfigurazione dell'app (vedere Recupero della configurazione dell'app dall'SDK).
Questa sezione descrive ogni tipo di notifica che l'SDK può inviare, quando e perché l'applicazione desidera ascoltarla e come implementare un ricevitore di notifica.
Tipi di notifiche
Tutte le notifiche SDK implementano l'interfaccia MAMNotification , che ha una singola funzione, getType(), che restituisce un'enumerazione MAMNotificationType .
La maggior parte delle notifiche sono istanze MAMUserNotification , che forniscono informazioni specifiche per una singola identità. L'OID dell'identità può essere recuperato tramite la getUserOid() funzione e l'UPN dell'identità può essere recuperato tramite getUserIdentity().
MAMEnrollmentNotification e MAMComplianceNotification si estendono MAMUserNotificationulteriormente, che contiene rispettivamente i risultati per i tentativi di registrare un utente o un dispositivo con il servizio MAM e i risultati per i tentativi di correggere la conformità per la CA di protezione delle app.
| Tipo di notifica | Classe di notifica | Motivo della notifica | Applicabilità | Suggerimenti per l'uso | Informazioni sul thread |
|---|---|---|---|---|---|
COMPLIANCE_STATUS |
MAMComplianceNotification |
Restituisce il risultato di un tentativo di correzione della conformità. | Le app che implementano la CA di protezione delle app devono gestire questa situazione. | – | Non deterministico |
MAM_ENROLLMENT_RESULT |
MAMEnrollmentNotification |
restituisce il risultato di un tentativo di registrazione. | Ricezione da parte di tutte le app. | – | Non deterministico |
MANAGEMENT_REMOVED |
MAMUserNotification |
L'app sta per diventare non gestita. | Le app che usano MAMDataProtectionManager questa gestione devono gestire questa situazione. |
Vedere MANAGEMENT_REMOVED. | Mai nel thread dell'interfaccia utente |
REFRESH_APP_CONFIG |
MAMUserNotification |
I valori di configurazione dell'app potrebbero essere stati modificati. | Le app che implementano la configurazione dell'app e memorizzano nella cache i dati di configurazione dell'app devono gestire questa operazione. | Le app devono invalidare e aggiornare tutti i dati di configurazione delle app memorizzati nella cache. | Non deterministico |
REFRESH_POLICY |
MAMUserNotification |
I criteri di protezione delle app potrebbero essere stati modificati. | Le app che memorizzano nella cache i criteri di protezione delle app devono gestire questa situazione. | Le app devono invalidare e aggiornare i dati dei criteri di protezione delle app memorizzati nella cache. | Non deterministico |
WIPE_USER_DATA |
MAMUserNotification |
La cancellazione sta per verificarsi (*). | Le app che usano MAMDataProtectionManager devono gestirlo oppureWIPE_USER_AUXILIARY_DATA. |
Vedere Cancellazione selettiva. | Mai nel thread dell'interfaccia utente |
WIPE_USER_AUXILIARY_DATA |
MAMUserNotification |
La cancellazione sta per verificarsi (*). | Solo le app con più identità ricevono questa opzione. Le app che usano MAMDataProtectionManager devono gestirlo oppureWIPE_USER_DATA. |
Vedere Cancellazione selettiva. | Mai nel thread dell'interfaccia utente |
WIPE_COMPLETED |
MAMUserNotification |
La cancellazione è stata completata. | Facoltativo per tutte le app. | Consegnato dopo WIPE_USER_DATA o WIPE_USER_AUXILIARY_DATA.Se l'app segnala un errore dal gestore di cancellazione, questa notifica non verrà inviata. |
Mai nel thread dell'interfaccia utente |
(*) I wipe possono verificarsi per molte ragioni, ad esempio:
- L'app denominata unregisterAccountForMAM.
- Un amministratore IT ha avviato una cancellazione remota.
- I criteri di accesso condizionale richiesti dall'amministratore non sono stati soddisfatti.
Avviso
Un'app non dovrebbe mai registrarsi sia per le WIPE_USER_DATAWIPE_USER_AUXILIARY_DATA notifiche.
MANAGEMENT_REMOVED
La MANAGEMENT_REMOVED notifica informa l'app che un account precedentemente gestito tramite criteri sta per non essere più gestito.
Dopo aver annullato la gestione dell'account, l'app non può più leggere i file crittografati dell'account, leggere i dati crittografati dell'account con MAMDataProtectionManager, interagire con gli Appunti crittografati o partecipare in altro modo all'ecosistema di app gestite.
Ciò non richiede la cancellazione dei dati dell'utente o la disconnessione dell'utente (se fosse necessaria una cancellazione, verrebbe inviata una WIPE_USER_DATA notifica).
Molte app potrebbero non aver bisogno di gestire questa notifica, ma le app che usano MAMDataProtectionManager devono gestire questa notifica.
Per informazioni dettagliate, vedi Protezione del buffer dei dati .
Quando l'SDK chiama il destinatario dell'app MANAGEMENT_REMOVED , si verifica quanto segue:
L'SDK ha già decrittografato in precedenza i file crittografati (ma non i buffer di dati protetti) che appartengono all'app. I file in posizioni pubbliche sulla scheda SD che non appartengono direttamente all'app (ad esempio, le cartelle Documenti o Download) non vengono decrittografati.
Tutti i nuovi file o buffer di dati protetti creati dal metodo destinatario (o qualsiasi altro codice eseguito dopo l'avvio del ricevitore) non sono crittografati.
L'app ha ancora accesso alle chiavi di crittografia, quindi operazioni come la decrittografia dei buffer di dati hanno esito positivo.
Dopo il ritorno del ricevitore, l'app non ha più accesso alle chiavi di crittografia.
Implementazione di MAMNotificationReceiver
Per eseguire la registrazione per le notifiche dall'SDK, l'app deve creare un MAMNotificationReceiver e registrarlo in MAMNotificationReceiverRegistry.
Per registrare il ricevitore, chiamare registerReceiver il destinatario e il tipo di notifica desiderato nel metodo Application.onCreate :
@Override
public void onCreate() {
super.onCreate();
MAMComponents.get(MAMNotificationReceiverRegistry.class)
.registerReceiver(
new ToastNotificationReceiver(),
MAMNotificationType.WIPE_USER_DATA);
}
L'implementazione MAMNotificationReceiver dell'app deve includere il onReceive(MAMNotification notification) metodo.
Questo metodo richiama singolarmente per ogni notifica ricevuta e deve restituire un errore .boolean
In genere, questo metodo dovrebbe sempre restituire true, a meno che l'applicazione non abbia riscontrato un errore durante la risposta a una notifica.
Come con altri tipi di ricevitori Android, l'applicazione offre flessibilità nella gestione delle notifiche:
- Può creare implementazioni MAMNotificationReceiver distinte per tipi di notifica distinti. In questo caso, assicurati di registrare separatamente ogni implementazione e ogni tipo di notifica.
- Può usare una singola implementazione MAMNotificationReceiver che contiene la logica per rispondere a più tipi di notifica distinti. In questo caso, deve essere registrato per ogni tipo di notifica a cui può rispondere.
- Può creare più implementazioni MAMNotificationReceiver che rispondono ognuna allo stesso tipo di notifica. In questo caso, entrambe devono essere registrate sullo stesso tipo di notifica.
Consiglio
È sicuro bloccarlo MAMNotificationReceiver.onReceive perché il suo callback non viene eseguito nel thread dell'interfaccia utente.
Temi personalizzati
È possibile fornire un tema personalizzato all'SDK dell'app Intune. Questo tema personalizzato si applica a tutte le schermate e le finestre di dialogo dell'SDK. Se non viene fornito un tema, viene usato il tema SDK predefinito.
Fornire un tema personalizzato
Per fornire un tema, aggiungi la seguente riga di codice nel Application.onMAMCreate metodo:
MAMThemeManager.setAppTheme(R.style.AppTheme);
Nell'esempio, sostituiscilo R.style.AppTheme con il tema di stile che l'SDK dovrebbe applicare.
Gestione dei certificati radice attendibili
Se l'applicazione richiede certificati SSL/TLS emessi da un'autorità di certificazione locale o privata per fornire un accesso sicuro a siti Web e applicazioni interni, l'SDK dell'app Intune ha aggiunto il supporto per la gestione dell'attendibilità dei certificati con le classi API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient.
Nota
MAMCertTrustWebViewClient supporta Android 10 o versioni successive.
La gestione dei certificati radice attendibili fornisce supporto per:
- SSLContext
- SSLSocketFactory
- TrustManager
- WebView
Requisiti
- La gestione dei certificati radice attendibili richiede una licenza di Microsoft Tunnel per la gestione delle applicazioni per dispositivi mobili. Per altre informazioni, visita: Microsoft Tunnel con gestione delle applicazioni per dispositivi mobili.
- Configurare i criteri di Intune Configurazione app per recapitare certificati radice attendibili alle app line-of-business e a Microsoft Edge su Android. Vedere: Utilizzare Microsoft Tunnel VPN con dispositivi Android che non si registrano con Microsoft Intune.
Nota
La gestione dei certificati radice attendibili può essere usata indipendentemente da Microsoft Tunnel Gateway VPN, ma è necessario concedere in licenza Microsoft MAM Tunnel per l'uso.
Uso di certificati radice attendibili da Intune per stabilire trust anchor
La gestione dei certificati radice attendibili consente all'app di usare certificati radice attendibili di Intune in combinazione con i certificati del dispositivo.
Le classi API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient usano i certificati radice attendibili di Intune recapitati tramite Criteri di Configurazione app come opzione di fallback se gli archivi certificati radice attendibili del dispositivo non contengono i certificati radice attendibili necessari per stabilire una connessione sicura alle risorse locali. In questo modo, l'app può usare sia i certificati del dispositivo che quelli di Intune per verificare connessioni sicure e comunicazioni con origini attendibili.
Per migliorare le impostazioni di sicurezza di rete, un'app può usare il file XML di configurazione della sicurezza di rete. La gestione dei certificati radice attendibili rispetta questa sicurezza aggiuntiva verificando se il codice XML di configurazione della sicurezza di rete dell'app include una di queste funzionalità:
- Trust anchor personalizzati con CA aggiuntive, come certificati autofirmati.
- Regole specifiche del dominio per limitare le CA attendibili.
- Set di pin per i certificati per domini specifici.
Nota
Per ulteriori informazioni sulla configurazione della sicurezza di rete Android, vedere Configurazione della sicurezza di rete.
Se uno di questi si applica a un dominio che viene controllato per l'attendibilità, Trusted Root Certificates Management ignora i controlli di attendibilità personalizzati per questo dominio e lascia che solo i trust manager predefiniti della piattaforma eseguano i controlli.
Classe MAMTrustedRootCertsManager
Questa classe fornisce le API seguenti:
-
createSSLContextForOID(String oid, String protocol): crea unSSLContextoggetto che utilizza certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. L'oggetto restituitoSSLContextda questa classe è già inizializzato correttamente conX509TrustManageroggetti che usano i certificati radice attendibili combinati dal dispositivo e dal servizio MAM. -
createSSLSocketFactoryForOID(String oid, String protocol): crea unSSLSocketFactoryoggetto che utilizza certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. L'oggetto restituitoSSLSocketFactoryè referenziato dallo stessoSSLContextoggetto in questa classe. -
createX509TrustManagersForOID(String oid): crea una matrice diX509TrustManageroggetti che usano i certificati radice attendibili combinati del dispositivo e del servizio MAM per l'identità specificata.
Nota
Il oid parametro deve essere l'ID utente (OID) di Microsoft Entra per un determinato utente che esegue l'applicazione. Se l'identificatore utente è sconosciuto in precedenza, è possibile passare un valore di null e MAM tenta di individuare l'identità corretta dal thread o dal processo in cui vengono richiamate queste API. L'identità deve essere impostata correttamente nel processo o nel thread affinché MAM possa individuare l'identità. Per altre informazioni sull'impostazione dell'identità attiva in un processo o thread, vedere Fase 5: Identità multipla.
Nota
Quando il protocol parametro non viene specificato, la piattaforma utilizza il protocollo SSL/TLS più alto supportato.
Di seguito sono disponibili alcuni esempi di utilizzo di questa classe.
Esempio di utilizzo di HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");
// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");
// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);
// Perform any other configuration or operations on the connection as needed
...
Esempio di utilizzo di OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);
// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);
// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();
// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();
// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();
// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();
// Perform any other operations on the response as needed
...
Classe MAMCertTrustWebViewClient
Questa classe fornisce un'implementazione personalizzata della classe android.webkit.WebViewClientAndroid. La classe fornisce un modo per gestire l'errore android.net.http.SslError.SSL_UNTRUSTED SSL in WebView.
Nella gestione dell'errore, la classe utilizza certificati radice attendibili configurati da Intune e forniti dal servizio MAM. Questo approccio verifica l'affidabilità dell'host dall'URL di destinazione che ha generato l'errore SSL in WebView. Se l'implementazione personalizzata non gestisce l'errore SSL, il sistema richiama il comportamento predefinito ereditato dalla superclasse.
Quando si utilizza questa classe, crearne un'istanza e quindi chiamarla WebView.setWebViewClient(WebViewClient) per registrarla con un'istanza WebView .
Ecco un esempio di utilizzo di questa classe.
Esempio di utilizzo di WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();
// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);
// Perform any other operations on WebView
...
Conformità in materia di privacy dell'App Store cinese
Alcuni app store cinesi richiedono alle applicazioni di visualizzare una finestra di dialogo di consenso della privacy agli utenti prima di eseguire operazioni che interagiscono con altre app nel dispositivo. Ciò include la registrazione di ricevitori broadcast che ascoltano gli eventi di installazione/disinstallazione del pacchetto. MAM SDK esegue questa operazione per ascoltare la presenza del Portale aziendale, dove risiede la maggior parte della logica MAM.
Se l'app viene distribuita tramite app store cinesi che hanno questo requisito, usa l'integrazione seguente per rinviare le operazioni di avvio offline fino all'ottenimento del consenso sulla privacy.
1. Aggiungi contrassegno manifesto
Aggiungere i metadati seguenti agli oggetti dell'app AndroidManifest.xml:
<application>
<meta-data
android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
android:value="true"/>
</application>
Nota
Questo flag deve essere aggiunto solo agli APK distribuiti tramite gli App Store cinesi che richiedono il consenso della privacy prima di interagire con altre app. Per gli APK distribuiti tramite altri store, questo flag non deve essere incluso.
2. Disponibilità del segnale dopo la finestra di dialogo sulla privacy
Dopo che l'utente ha accettato la finestra di dialogo di consenso della privacy, chiamare l'SDK per segnalare che le operazioni di avvio offline possono procedere:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
.setOfflineStartupReady()
O in Java:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
.setOfflineStartupReady();
Comportamento
Lo stato pronto viene mantenuto anche dopo l'avvio delle app. Una volta setOfflineStartupReady() chiamata, i lanci successivi registreranno il ricevitore immediatamente durante l'inizializzazione dell'app.
Note
- Il
setOfflineStartupReady()metodo è idempotente; chiamarlo più volte è sicuro. - Se il Portale aziendale è già installato (modalità online), la chiamata
setOfflineStartupReady()non ha alcun effetto perché il destinatario non è necessario. -
Importante: l'utente deve sempre chiamare
setOfflineStartupReady()dopo che la finestra di dialogo sulla privacy è stata accettata.
Criteri di chiusura
Per altre informazioni, vedere Test rapido con criteri di modifica per facilitare il test.
Convalidare le restrizioni Salva in e Apri da
Ignorare questa sezione se non sono stati implementati i criteri per limitare il trasferimento dei dati tra le app e le posizioni di archiviazione nel dispositivo o nel cloud.
Acquisisci familiarità con ogni scenario in cui la tua app può salvare dati in servizi cloud o dati locali e aprire dati da servizi cloud o dati locali.
Per semplicità, questi test presuppongono che l'app includa solo il supporto per il salvataggio e l'apertura dei dati da OneDrive da un'unica posizione all'interno dell'app. Tuttavia, è necessario convalidare ogni combinazione: ogni percorso di salvataggio supportato rispetto a ogni posizione consentita dall'app consente il salvataggio dei dati e ogni posizione aperta supportata rispetto a ogni posizione consentita dall'app nell'apertura dei dati.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di iniziare il test. Inoltre:
- Impostare il criterio dell'account gestito su:
- "Invia dati dell'organizzazione ad altre app" impostato su "App gestite da criteri".
- "Ricevi dati da altre app" impostato su "App gestite da criteri".
| Scenario | Presupposti | Procedura |
|---|---|---|
| Salva fino a, completamente consentito | Il criterio "Salva copie dei dati dell'organizzazione" è impostato su Consenti | - Passa alla parte dell'app in cui può salvare i dati su OneDrive. - Prova a salvare un documento su OneDrive utilizzando lo stesso account gestito connesso alla tua app. - Conferma che il salvataggio è consentito. |
| Salva a, esentato | - Criterio "Salva copie dei dati dell'organizzazione" impostato su Blocca - Criterio "Consenti all'utente di salvare copie nei servizi selezionati" impostato solo su OneDrive |
- Passa alla parte dell'app in cui può salvare i dati su OneDrive. - Prova a salvare un documento su OneDrive utilizzando lo stesso account gestito connesso alla tua app. - Conferma che il salvataggio è consentito. - Se l'app lo consente, prova a salvare il file in un'altra posizione di archiviazione nel cloud e verifica che sia bloccato. |
| Salva in, bloccato | Il criterio "Salva copie dei dati dell'organizzazione" è impostato su Blocca | - Passa alla parte dell'app in cui può salvare i dati su OneDrive. - Prova a salvare un documento su OneDrive utilizzando lo stesso account gestito connesso alla tua app. - Conferma che il salvataggio è bloccato. - Se l'app lo consente, prova a salvare il file in un'altra posizione di archiviazione nel cloud e verifica che sia bloccato. |
| Aperto da, completamente consentito | Criterio "Apri dati nei documenti dell'organizzazione" impostato su Consenti | - Passare alla parte dell'app in cui è possibile aprire i dati da OneDrive. - Prova ad aprire un documento da OneDrive utilizzando lo stesso account gestito connesso allo spazio di archiviazione dell'app. - Conferma che l'apertura è consentita. |
| Aperto da, esentato | - Criterio "Apri dati nei documenti dell'organizzazione" impostato su Blocca - Criterio "Consenti agli utenti di aprire dati da servizi selezionati" impostato solo su OneDrive |
- Passare alla parte dell'app in cui è possibile aprire i dati da OneDrive. - Prova ad aprire un documento da OneDrive utilizzando lo stesso account gestito connesso allo spazio di archiviazione dell'app. - Conferma che l'apertura è consentita. - Se l'app lo consente, prova ad aprire un altro file da una posizione di archiviazione cloud diversa e verifica che sia bloccato. |
| Aperto da, bloccato | Il criterio "Apri dati nei documenti dell'organizzazione" è impostato su Blocca | - Passare alla parte dell'app in cui è possibile aprire i dati da OneDrive. - Prova ad aprire un documento da OneDrive utilizzando lo stesso account gestito connesso allo spazio di archiviazione dell'app. - Conferma che l'apertura sia bloccata. - Se l'app lo consente, prova ad aprire un altro file da una posizione di archiviazione cloud diversa e verifica che sia bloccato. |
Convalida delle restrizioni di notifica
Ignora questa sezione se non hai implementato i criteri per limitare il contenuto all'interno delle notifiche.
Per quanto riguarda i criteri di protezione delle app, l'applicazione potrebbe generare tre diversi tipi di notifiche:
- Notifiche che non contengono dati dell'account.
- Notifiche che contengono dati appartenenti a un account gestito.
- Notifiche che contengono dati appartenenti a un account non gestito.
Se l'applicazione è a identità singola, solo le prime due sono rilevanti, poiché non vengono applicate protezioni se l'unico account non è gestito.
È possibile convalidare le restrizioni delle notifiche attivando tutti e tre i tipi di notifiche con valori di criteri diversi configurati.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di iniziare il test. Se l'app utilizza più identità, è anche possibile accedere all'app con un account non gestito.
| Scenario | Presupposti | Procedura |
|---|---|---|
| Contenuto completo bloccato | Il criterio "Notifiche dei dati dell'organizzazione" è impostato su Blocca | - Attiva la tua app per generare una notifica senza dati sull'account. - Conferma che la notifica non visualizzi alcun contenuto. - Attiva l'app per generare una notifica con i dati dell'account gestito. - Conferma che la notifica non visualizzi alcun contenuto. - Attiva l'app per generare una notifica con i dati dell'account non gestito. - Conferma che la notifica non visualizzi alcun contenuto. |
| Contenuto parziale bloccato | Il criterio "Notifiche dei dati dell'organizzazione" è impostato su Blocca dati dell'organizzazione | - Attiva la tua app per generare una notifica senza dati sull'account. - Conferma che la notifica mostri il suo contenuto completo. - Attiva l'app per generare una notifica con i dati dell'account gestito. - Conferma che la notifica oscura il contenuto dell'account gestito. - Attiva l'app per generare una notifica con i dati dell'account non gestito. - Conferma che la notifica mostri il suo contenuto completo. |
| Nessun contenuto bloccato | Criterio "Notifiche dati organizzazione" impostato su Consenti | - Attiva la tua app per generare una notifica senza dati sull'account. - Conferma che la notifica mostri il suo contenuto completo. - Attiva l'app per generare una notifica con i dati dell'account gestito. - Conferma che la notifica mostri il suo contenuto completo. - Attiva l'app per generare una notifica con i dati dell'account non gestito. - Conferma che la notifica mostri il suo contenuto completo. |
Convalida del backup e del ripristino dei dati
Ignorare questa sezione se non sono stati implementati i criteri per la protezione dei dati di backup.
Acquisisci familiarità con il contenuto (file e coppie chiave-valore) che l'app ha configurato per il backup. È necessario verificare che solo il contenuto previsto faccia parte del ripristino. Il contenuto extra nel ripristino può causare una perdita di dati.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di iniziare il test. Se l'app utilizza più identità, accedere all'app anche con un account non gestito.
Segui le istruzioni ufficiali di Android per testare il backup. Queste istruzioni sono diverse per il backup automatico e il backup chiave/valore, quindi seguile attentamente.
Convalida dell'acquisizione dello schermo personalizzata in base ai criteri
Ignorare questa sezione se non sono state implementate restrizioni per l'trascrivi dello schermo personalizzato.
Se l'applicazione dispone di una funzionalità che ignora il livello FLAG_SECUREdi Android , verificare che questa funzione sia bloccata dalle restrizioni dell'acquisizione dello schermo dei criteri di Windowprotezione delle app.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di iniziare il test.
| Scenario | Presupposti | Procedura |
|---|---|---|
| Acquisizione dello schermo bloccata | Il criterio "Acquisizione schermo e Assistente Google" è impostato su Blocca | - Passa alla parte dell'app che utilizza il codice personalizzato FLAG_SECURE .- Prova a usare quella funzione. - Conferma che la funzionalità è bloccata. |
| Acquisizione dello schermo consentita | Criterio "Acquisizione schermo e Assistente Google" impostato su Consenti | - Passa alla parte dell'app che utilizza il codice personalizzato FLAG_SECURE .- Prova a usare quella funzione. - Conferma che la funzione sia consentita. |
Convalida della CA di protezione delle app
Ignorare questa sezione se non è stato implementato Support App Protection CA.
Oltre ai passaggi di convalida tipici della creazione e dell'assegnazione di criteri di protezione delle app all'account di app e di test, è necessario creare e assegnare anche criteri di accesso condizionale per la protezione delle app all'account di test. Per informazioni dettagliate, vedere Configurare criteri di accesso condizionale basati su app con Intune.
Fasi del test:
- Disinstallare Microsoft Authenticator e il Portale aziendale Intune prima di iniziare questo test.
- Installare l'app.
- Accedere all'app con l'account di test mirato con i criteri di protezione delle app e i criteri CA basati su app.
- Verificare che l'app richieda di installare il Portale aziendale.
- Accedi di nuovo.
- Conferma che l'app ti richieda di registrare il dispositivo. Seguire le istruzioni visualizzate. Se l'app non richiede la registrazione qui, verificare che il dispositivo di test abbia prima disinstallato altre app abilitate per l'SDK, il Portale aziendale e Authenticator. Se il messaggio continua a non essere visualizzato, rivedere le istruzioni di implementazione.
- Conferma di essere in grado di accedere a tutti i dati dell'app dopo la registrazione.
Convalida dei ricevitori di notifica
Ignorare questa sezione se non è stato implementato Registrati per le notifiche dall'SDK.
I passaggi di convalida dipendono dai tipi di notifiche a cui l'app è registrata. Per tutti i tipi di notifiche, aggiungi la registrazione per assicurarti che il destinatario venga richiamato correttamente.
MAM_ENROLLMENT_RESULT Può essere attivato accedendo all'applicazione con un account definito come target dai criteri di protezione delle app.
È possibile attivare REFRESH_APP_CONFIG e REFRESH_POLICY aggiornando i rispettivi criteri di configurazione app e criteri di protezione delle app destinati all'account di test e attendendo che l'SDK riceva criteri aggiornati.
Consiglio
Per velocizzare questo processo, vedere Test rapidi con la modifica dei criteri .
È possibile attivare MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAe notifiche WIPE_COMPLETEDemettendo una cancellazione selettiva da Microsoft Intune.
Convalida dei temi personalizzati
Ignorare questa sezione se non sono stati implementati temi personalizzati.
È possibile convalidare il supporto del tema personalizzato controllando i colori nelle finestre di dialogo dell'SDK. La finestra di dialogo più semplice da controllare è la schermata del PIN MAM.
Presupposti:
- Impostare il criterio dell'account gestito su:
- "PIN per l'accesso" impostato su "Obbligatorio".
- Installare l'app e il Portale aziendale Intune.
Fasi del test:
- Avviare l'applicazione e accedere con l'account di test.
- Verifica che la schermata del PIN MAM venga visualizzata e che sia a tema in base al tema personalizzato fornito all'SDK.
Operazioni successive
Se è stata seguita questa guida nell'ordine e sono stati completati tutti i criteri di uscita precedenti in questo articolo, l'app è ora completamente integrata con Intune App SDK e può applicare criteri di protezione delle app. Se hai ignorato una delle sezioni di partecipazione all'app precedenti, Fase 5: Multi-identità e Fase 6: Configurazione app, e non sei sicuro che la tua app debba supportare queste funzionalità, rivedi Decisioni chiave per l'integrazione dell'SDK.
La protezione di app è ora uno scenario fondamentale per la tua app. Continua a fare riferimento a questa guida e all'Appendice mentre continui a sviluppare la tua app.