Intune App SDK per Android - Funzionalità di partecipazione alle app
Microsoft Intune App SDK per Android consente di incorporare Intune criteri di protezione delle app (noti anche come criteri APP o MAM) nell'app Java/Kotlin Android nativa. Un'applicazione gestita da Intune è integrata con Intune App SDK. Intune gli amministratori possono distribuire facilmente i criteri di protezione delle app nell'app gestita da Intune quando Intune gestisce attivamente l'app.
Nota
Questa guida è suddivisa in diverse fasi distinte. Per iniziare, vedere Pianificare l'integrazione.
Fase 7: Funzionalità di partecipazione alle app
Fase Goals
- Informazioni sulle varie funzionalità di partecipazione alle app offerte da Intune App SDK.
- Integrare le funzionalità di partecipazione alle app rilevanti per l'app e gli utenti.
- Testare l'integrazione di tali funzionalità.
Che cosa sono le "funzionalità di partecipazione alle app"?
Questo processo di integrazione dell'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 può ora applicare 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 per il trasferimento dei dati.
Esistono tuttavia alcune impostazioni che richiedono codice specifico dell'app per essere applicato correttamente; queste sono chiamate funzionalità di partecipazione alle app. In genere, l'SDK non ha un contesto sufficiente per il codice dell'applicazione o lo 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, vedere Decisioni chiave per l'integrazione dell'SDK .
Le fasi precedenti di questa guida hanno già descritto diverse funzionalità di partecipazione alle app:
- Identità multipla come illustrato nella fase 5: Multi-Identity.
- Configurazione dell'app come illustrato nella fase 6: Configurazione app.
Il resto di questa guida descrive il set rimanente di funzionalità di partecipazione alle app:
- Applicare 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 per la protezione dei dati di backup.
- Applicare criteri che limitano l'acquisizione dello schermo (se l'app ha codice di acquisizione dello schermo personalizzato).
- Supporto della CA di Protezione app.
- Eseguire la registrazione per le notifiche dall'SDK.
- Applicare il tema dell'applicazione personalizzata.
- Usare certificati attendibili da Intune per garantire la catena di attendibilità agli endpoint locali.
Nozioni di base sulla funzionalità di partecipazione alle app
L'interfaccia AppPolicy contiene molti metodi che informano l'app se determinate azioni sono consentite.
La maggior parte delle funzionalità di partecipazione alle app riguarda:
- Identificazione della posizione corretta nel codice dell'app per verificare se è consentita un'azione.
- Chiamata di un
AppPolicy
metodo per verificare se è consentita un'azione, in base ai criteri attualmente configurati. - A seconda del risultato, consentire il completamento dell'azione o modificare il comportamento dell'app quando l'azione viene bloccata.
Per recuperare un'istanza AppPolicy
di , usare uno dei metodi MAMPolicyManager , ad getPolicy(final Context context)
esempio o getPolicyForIdentityOID(final String oid)
.
Metodi informativi in AppPolicy
Non tutti i metodi in AppPolicy
sono associati a una funzionalità di partecipazione alle app.
Alcuni metodi sono informativi e forniscono ai dati dell'app i criteri attualmente configurati, anche se tali criteri vengono applicati automaticamente dall'SDK.
Questi metodi esistono per offrire all'app la possibilità di presentare un'esperienza utente personalizzata quando vengono configurati criteri specifici.
Esempio: determinare se gli screenshot sono bloccati
Se l'app ha un controllo che consente all'utente di acquisire uno screenshot, potrebbe essere necessario disabilitare o nascondere tale controllo se i criteri di protezione delle app hanno screenshot bloccati.
L'app potrebbe verificarlo chiamando MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()
.
Criteri per limitare il trasferimento dei dati tra app e posizioni di archiviazione di dispositivi o cloud
Molte app consentono all'utente finale di salvare o aprire i dati dall'archiviazione file locale o dai servizi di archiviazione cloud. Il 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 diretta dei dati nell'app, è necessario implementare questa funzionalità di partecipazione all'app Intune App SDK per consentire agli amministratori IT di bloccare il salvataggio o l'apertura.
Salvataggio nel dispositivo o nell'archiviazione cloud
L'API getIsSaveToLocationAllowedForOID
consente all'app di sapere se il salvataggio in determinate posizioni è consentito per una determinata identità, in base ai criteri configurati:
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_FOR_BUSINESS |
L'app salva i dati in OneDrive. | OID per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
SHAREPOINT |
L'app salva i dati in Sharepoint. | OID per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
BOX |
Questa app salva i dati in Box. | OID per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
LOCAL |
L'app salva i dati in un percorso di archiviazione esterno nel dispositivo che non è l'archiviazione privata dell'app. | L'archiviazione esterna non è considerata un servizio cloud e pertanto deve essere sempre usata con un null parametro oid. |
PHOTO_LIBRARY |
L'app salva i dati nell'archivio foto locale Android. | L'archiviazione di foto locale Android non è considerata un servizio cloud e quindi deve essere sempre usata con un null parametro oid. |
ACCOUNT_DOCUMENT |
L'app salva i dati in una posizione associata a un account all'interno dell'app e non è una delle posizioni cloud specifiche specificate in precedenza. *Questa posizione deve essere usata per determinare se i dati possono essere passati tra account all'interno di un'app multi-identità. | OID per un account usato per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
OTHER |
L'app salva i dati in una posizione non specificata in precedenza e non soddisfa i criteri per ACCOUNT_DOCUMENT . |
L'oggetto oid non viene valutato per questa posizione e quindi deve essere null . |
I file inseriti nell'archivio app privato necessari per il funzionamento dell'app o scaricati temporaneamente per la visualizzazione sono sempre consentiti; non è necessario controllare getIsSaveToLocationAllowedForOID
.
Verificare la presenza di SaveLocation.LOCAL
- File salvati all'esterno dell'archiviazione di app private.
- File scaricati nell'archivio app privato che non sono necessari per il funzionamento dell'app, ad esempio l'utente che sceglie deliberatamente di scaricare nel dispositivo.
Nota
Durante il controllo dei criteri di salvataggio, oid
deve essere l'OID dell'account associato al servizio cloud in cui viene salvato (non necessariamente lo stesso account proprietario del documento da salvare).
Apertura dei dati da una posizione di archiviazione locale o 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 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. | OID per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
SHAREPOINT |
L'app sta aprendo i dati da Sharepoint. | OID per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
CAMERA |
L'app sta aprendo i dati dalla fotocamera. | Valore null , perché la fotocamera del dispositivo non è un servizio cloud. |
LOCAL |
L'app sta aprendo i dati da un percorso di archiviazione esterno nel dispositivo che non è l'archiviazione privata dell'app. | Anche se l'archiviazione esterna non è una posizione del servizio cloud, è previsto un oid parametro perché indica la proprietà. Quando si apre un file dall'archiviazione locale, è sempre necessario considerare il proprietario del file, perché il criterio di salvataggio del proprietario del file può o meno consentire ad altre identità di aprire il file: - Per i file con tag identity, oid deve essere l'identità del proprietario del file. - Per i file senza tag identity, oid deve essere null . |
PHOTO_LIBRARY |
L'app sta aprendo i dati dall'archivio locale di foto Android. | L'archiviazione di foto locale Android non è considerata un servizio cloud e quindi deve essere sempre usata con un null parametro oid. |
ACCOUNT_DOCUMENT |
L'app apre i dati da una posizione associata a un account all'interno dell'app e non è una delle posizioni cloud specifiche specificate in precedenza. *Questa posizione deve essere usata per determinare se i dati possono essere passati tra account all'interno di un'app multi-identità. | OID per un account usato per l'autenticazione Microsoft Entra. Se tale account non esiste o l'OID non è noto, usare null . |
OTHER |
L'app apre i dati da una posizione non specificata in precedenza e non soddisfa i criteri per ACCOUNT_DOCUMENT . |
L'oggetto oid non viene valutato per questa posizione e quindi deve essere null . |
Nota
Quando si verificano i criteri aperti, 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 sta aprendo il documento).
Consiglio
Per praticità, l'SDK fornisce il metodo AppPolicy.isOpenFromLocalStorageAllowed
che accetta un File
parametro per un file nell'archiviazione locale.
Il termine per l'applicazione dei criteri è funzionalmente identico alla chiamata AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid)
, ma gestisce l'analisi del proprietario del oid
file da File
.
Finestra di dialogo di condivisione bloccata
L'SDK fornisce una finestra di dialogo per notificare all'utente che un'azione di trasferimento dei dati è stata bloccata dai criteri MAM.
La finestra di dialogo deve essere visualizzata all'utente ogni volta che la getIsSaveToLocationAllowedForOID
chiamata API o getIsOpenFromLocationAllowedForOID
comporta il blocco dell'azione di salvataggio/apertura.
La finestra di dialogo visualizza un messaggio generico e tornerà alla chiamata Activity
quando viene chiusa.
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'archiviazione privata dell'app e quindi aprendoli con lo chooser di sistema.
Criteri per limitare il contenuto all'interno delle notifiche
Per le app con identità singola, il comportamento predefinito di Intune App SDK tenterà 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 dell'organizzazione", che ha lo scopo di rimuovere solo il contenuto gestito dalle notifiche. Per le app multi-identità, l'SDK non è in grado di determinare quali notifiche contengono contenuto gestito.
Se l'app visualizza notifiche ed è multi-identità e/o vuole rispettare il valore "Blocca dati dell'organizzazione", deve controllare i criteri di restrizione delle notifiche per l'account associato alla notifica prima di visualizzare la notifica.
Per determinare se i criteri vengono applicati, 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 visualizzare alcuna notifica per l'account associato a questo criterio. Per le app con identità singola, il Intune App SDK bloccherà automaticamente tutte le notifiche e non è necessario alcun codice aggiuntivo. |
BLOCK_ORG_DATA |
L'app deve mostrare una notifica modificata che non contiene dati dell'organizzazione. |
UNRESTRICTED |
L'app deve mostrare tutte le notifiche. |
Se l'app non richiama getNotificationRestriction
correttamente , MAM SDK farà il possibile per limitare automaticamente le notifiche solo per le app con identità singola.
In questo caso, BLOCK_ORG_DATA
viene trattato come BLOCKED
e la notifica non verrà visualizzata affatto.
Per un controllo più dettagliato, controllare il valore di e modificare le notifiche dell'app getNotificationRestriction
in modo appropriato.
Criteri per la protezione dei dati di backup
Il Intune App SDK può bloccare il caricamento dei dati nella funzionalità di backup e ripristino predefinita di Android. Per altre informazioni sul backup e il ripristino in Android, vedere la guida all'API Android e le modifiche introdotte in Android S/12 qui: Modificare il backup e il ripristino.
Backup automatico per le app
A partire da Android M, Android ha iniziato a offrire backup completi automatici a Google Drive per le app, indipendentemente dall'API di destinazione dell'app.
Intune consente di utilizzare tutte le funzionalità di backup automatico disponibili da Android, inclusa la possibilità di definire regole personalizzate in XML, con indicazioni specifiche per l'integrazione Intune per garantire l'applicazione della 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 la funzionalità di backup e ripristino completa, impostare android:allowBackup
su false.
In questo caso, non sono necessarie ulteriori azioni e i dati "aziendali" rimarranno all'interno dell'app.
Se l'app richiede la funzionalità di backup e ripristino completa, impostare su android:allowBackup
true ed eseguire i passaggi aggiuntivi seguenti:
Se l'app non usa un proprio oggetto personalizzato
BackupAgent
, usa l'agente MAMBackupAgent predefinito per consentire backup completi automatici conformi ai criteri Intune. Inserire quanto segue nel manifesto dell'app:<application ... android:fullBackupOnly="true" android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent" ...> </application>
[Facoltativo] Se è stato implementato un oggetto personalizzato
BackupAgent
facoltativo, è necessario assicurarsi di usare MAMBackupAgent o MAMBackupAgentHelper. Vedere le sezioni seguenti. Provare a passare all'uso di MAMDefaultBackupAgent di Intune, descritto nel passaggio 1, che offre un facile backup in Android M e versioni successive.Quando decidi quale tipo di backup completo l'app deve ricevere (non filtrata, filtrata o nessuna), dovrai impostare l'attributo
android:fullBackupContent
su true, false o su una risorsa XML nella tua app.È quindi necessario copiare il valore per
android:fullBackupContent
nelcom.microsoft.intune.mam.FullBackupContent
tag di metadati e nel tag di metadati per le app che supportano il nuovo formato di configurazione XML aggiunto nell'APIcom.microsoft.intune.mam.DataExtractionRules
31.Esempio 1: se vuoi che l'app disponga di backup completi senza esclusioni, devi 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 vuoi che l'app usi i relativi backup automatici personalizzati
BackupAgent
e non completi, conformi ai criteri Intune, devi 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 vuoi che l'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 Backup chiave/valore è disponibile per tutte le API 8+ e carica i dati dell'app nel servizio Backup Android. La quantità di dati per app è limitata a 5 MB. Se si usa il backup di chiave/valore, è necessario usare un BackupAgentHelper o un BackupAgent.
BackupAgentHelper
BackupAgentHelper è più semplice da implementare rispetto a BackupAgent sia in termini di funzionalità android native che di Intune l'integrazione MAM BackupAgentHelper consente allo sviluppatore di registrare interi file e preferenze condivise in e FileBackupHelper
SharedPreferencesBackupHelper
(rispettivamente) che vengono quindi aggiunti a BackupAgentHelper al momento della creazione.
Seguire la procedura seguente per usare backupAgentHelper con Intune MAM:
Per usare il backup con più identità con ,
BackupAgentHelper
seguire la guida di Android all'estensione di BackupAgentHelper.Fare in modo che la classe estenda l'equivalente MAM di BackupAgentHelper, FileBackupHelper e SharedPreferencesBackupHelper.
Classe Android | Equivalente MAM |
---|---|
BackupAgentHelper | MAMBackupAgentHelper |
FileBackupHelper | MAMFileBackupHelper |
SharedPreferencesBackupHelper | MAMSharedPreferencesBackupHelper |
Seguendo queste linee guida, il backup e il ripristino multi-identità avranno esito positivo.
BackupAgent
BackupAgent consente di essere molto più espliciti sui dati di cui viene eseguito il backup. Poiché lo sviluppatore è abbastanza responsabile dell'implementazione, sono necessari altri passaggi per garantire la protezione dei dati appropriata da Intune. Poiché la maggior parte del lavoro viene eseguita, lo sviluppatore Intune l'integrazione è leggermente più coinvolta.
Integrare MAM:
Leggere attentamente la guida android per Il backup di chiave/valore e in particolare l'estensione di BackupAgent per assicurarsi che l'implementazione di BackupAgent segua le linee guida android.
Fare in modo che la classe estenda MAMBackupAgent.
Backup multi-identità:
Prima di iniziare il backup, verificare che i file o i buffer di dati di cui si prevede di eseguire il backup siano effettivamente consentiti dall'amministratore IT per il backup in scenari multi-identità. Usare
isBackupAllowed
in MAMFileProtectionManager e MAMDataProtectionManager per determinarlo. Se non è consentito eseguire il backup del file o del buffer di dati, non è consigliabile includerlo nel backup.A 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. In questo modo verranno create automaticamente nuove entità di backup e le si scriverà automaticamente inBackupDataOutput
. Queste entità verranno usate automaticamente al momento del ripristino.
Ripristino multi-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 ottenere un ripristino multi-identità riuscito, è necessario seguire la struttura generale fornita in questo esempio di codice con particolare attenzione a quanto segue:
È necessario usare un
while(data.readNextHeader())
ciclo * per passare attraverso le entità di backup.È necessario chiamare
data.skipEntityData()
sedata.getKey()
non corrisponde alla chiave scritta inonBackup
. Senza eseguire questo passaggio, i ripristini potrebbero non riuscire.Evitare di restituire durante l'utilizzo
while(data.readNextHeader())
di entità di backup nel costrutto * perché le entità scritte automaticamente andranno perse.
- Dove
data
è il nome della variabile locale per MAMBackupDataInput passato all'app al momento del ripristino.
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()
.
Nota
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.
Supporto della CA di Protezione app
La CA di protezione delle app (accesso condizionale), nota anche come CA basata su app, limita l'accesso alle risorse fino a quando l'applicazione non viene gestita dai criteri di protezione delle app Intune. Microsoft Entra ID applica questa funzionalità richiedendo che l'app venga registrata e gestita dall'APP prima di concedere un token per accedere a una risorsa protetta da CA.
Nota
Il supporto per la CA di Protezione app richiede la versione 1.0.0 (o successiva) della libreria MSAL.
Gestire la non conformità con MSAL
Quando si acquisisce un token per un account, la libreria MSAL può restituire o generare un oggetto MsalIntuneAppProtectionPolicyRequiredException
per indicare la non conformità con la gestione dei criteri di protezione delle app.
È possibile estrarre parametri aggiuntivi dall'eccezione per l'uso nella correzione della conformità (vedere MAMComplianceManager).
Una volta completata la 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 deve essere chiamato per tentare di mettere l'app in uno stato conforme.
Un riferimento a MAMComplianceManager
può essere ottenuto come segue:
MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);
// make use of mgr
È garantito che l'istanza MAMComplianceManager
restituita non sia 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 viene chiamato per tentare di mettere l'app in gestione per soddisfare le condizioni per Microsoft Entra ID concedere il token richiesto.
I primi quattro parametri possono essere estratti dall'eccezione ricevuta dal metodo MSAL AuthenticationCallback.onError()
(vedere l'esempio di codice riportato di seguito).
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 di blocco in modo che le app non debbano mostrare un'esperienza utente personalizzata durante questa operazione.
Questa finestra di dialogo verrà visualizzata solo mentre è in corso la correzione della conformità; non visualizzerà 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 informazioni dettagliate , vedere Notifiche sullo stato di conformità .
remediateCompliance()
può avviare una registrazione MAM come parte della verifica della conformità.
L'app può ricevere una notifica di registrazione se ha registrato un ricevitore di notifiche per le notifiche di registrazione.
Il metodo registrato MAMServiceAuthenticationCallback
dell'app verrà acquireToken()
chiamato per ottenere un token per la registrazione.
acquireToken()
verrà chiamato prima che l'app abbia acquisito il proprio token, quindi qualsiasi attività di contabilità o creazione dell'account eseguita dall'app dopo un'acquisizione di token riuscita potrebbe non essere ancora stata eseguita.
Il callback deve essere in grado di acquisire un token in questo caso.
Se non è possibile restituire un token da acquireToken()
, il tentativo di correzione della conformità avrà esito negativo.
Se si chiama updateToken
in un secondo momento con un token valido per la risorsa richiesta, la correzione della conformità verrà ritentata immediatamente con il token specificato.
Nota
L'acquisizione di token invisibile all'utente sarà comunque possibile in acquireToken()
perché l'utente sarà già stato guidato all'installazione del broker e alla registrazione del dispositivo prima della ricezione dell'eccezione MsalIntuneAppProtectionPolicyRequiredException
.
In questo modo, il broker avrà un token di aggiornamento valido nella cache, consentendo l'acquisizione invisibile all'utente del token richiesto.
Di seguito è riportato un esempio di ricezione dell'errore richiesto dai criteri nel AuthenticationCallback.onError()
metodo e di chiamata di 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 esegue la registrazione per le notifiche di tipo COMPLIANCE_STATUS
, verrà inviato un MAMComplianceNotification
oggetto per informare l'app dello stato finale del tentativo di correzione della conformità.
Per informazioni dettagliate sulla registrazione, vedere Registrare 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 |
Lo stato è sconosciuto. Questo potrebbe indicare un motivo di errore imprevisto. Altre informazioni sono disponibili nei log di Portale aziendale. |
COMPLIANT |
Correzione della conformità completata e l'app è ora conforme ai criteri. L'acquisizione del token MSAL deve essere ritentata. |
NOT_COMPLIANT |
Tentativo di correzione della 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. Altre informazioni sull'errore vengono inviate con MAMComplianceNotification. |
SERVICE_FAILURE |
Errore durante il tentativo di recuperare i dati di conformità dal servizio Intune. Altre informazioni sono disponibili nei log di Portale aziendale. |
NETWORK_FAILURE |
Si è verificato un errore durante la connessione al servizio Intune. L'app deve ritentare l'acquisizione del token quando viene ripristinata la connessione di rete. |
CLIENT_ERROR |
Il tentativo di correggere la conformità non è riuscito per qualche motivo correlato al client. Ad esempio, nessun token o utente errato. Altre informazioni sull'errore vengono inviate con MAMComplianceNotification. |
PENDING |
Il tentativo di correggere la conformità non è riuscito perché la risposta di stato non era ancora stata ricevuta dal servizio quando il limite di tempo è stato superato. L'app dovrebbe provare di nuovo 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 il Portale aziendale è già installato nel dispositivo, l'app deve essere riavviata. In questo caso, verrà visualizzata una finestra di dialogo che chiede all'utente di riavviare l'app. |
Se lo stato di conformità è MAMCAComplianceStatus.COMPLIANT
, l'app deve reinizializzare l'acquisizione del token originale (per la propria risorsa).
Se il tentativo di correzione della conformità non è riuscito, i getComplianceErrorTitle()
metodi e getComplianceErrorMessage()
restituiscono le stringhe localizzate che l'app può visualizzare all'utente finale, se lo sceglie.
La maggior parte dei casi di errore non è correggibile dall'app, quindi per il caso generale potrebbe essere preferibile non riuscire la creazione o l'accesso dell'account e consentire all'utente di riprovare in un secondo momento.
Se un errore è persistente, i log di Portale aziendale possono aiutare a determinare la causa. L'utente finale può inviare i log. Per altre informazioni, vedere Caricamento e log di posta elettronica.
Ecco 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
Il ricevitore di notifica deve essere registrato prima di chiamare remediateCompliance()
per evitare una race condition che potrebbe causare la mancata ricezione della notifica.
Dichiarazione del supporto per la CA di Protezione app
Una volta che l'app è pronta per gestire la correzione della CA dell'app, è possibile indicare a Microsoft Identity che l'app è pronta per la CA dell'app. A tale scopo nell'applicazione MSAL, compilare il client pubblico usando 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"
}
}
]
}
Dopo aver completato quanto descritto in precedenza, procedere con la convalida della CA di protezione delle app riportata di seguito.
Note sull'implementazione
Nota
Il metodo dell'app MAMServiceAuthenticationCallback.acquireToken()
deve passare false per forceRefresh
il flag a acquireTokenSilentAsync()
.
AcquireTokenSilentParameters acquireTokenSilentParameters =
builder.withScopes(Arrays.asList(scopes))
.forceRefresh(false)
.build();
acquireTokenSilentAsync(acquireTokenSilentParameters);
Nota
Se si vuole visualizzare un'esperienza utente di blocco personalizzata durante il tentativo di correzione, è necessario passare false per il parametro showUX a remediateCompliance()
.
È necessario assicurarsi di visualizzare l'esperienza utente e registrare prima il listener di notifica prima di chiamare remediateCompliance()
.
In questo modo si eviterà una race condition in cui la notifica potrebbe essere persa se remediateCompliance()
non riesce molto rapidamente.
Ad esempio, il onCreate()
metodo o 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 all'esperienza utente come extra di finalità.
Quando viene ricevuta la notifica dello stato di conformità, è possibile visualizzare il risultato o semplicemente completare l'attività.
Nota
remediateCompliance()
registrerà l'account e tenterà la registrazione. Una volta acquisito il token principale, la chiamata registerAccountForMAM()
non è necessaria, ma non c'è alcun danno a 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 ed evitare tentativi di registrazione in background.
Eseguire la registrazione per le notifiche dall'SDK
La guida Intune App SDK ha già illustrato diversi scenari in cui potrebbe essere necessario registrare l'app per le notifiche dall'SDK, ad esempio:
- Gestione di
WRONG_USER
app multi-identità (vedere Identità gestite e non gestite) - Gestione di app
MANAGEMENT_REMOVED
multi-identità (vedere Protezione buffer dati). - Gestione di app
WIPE_USER_DATA
multi-identità oWIPE_USER_AUXILIARY_DATA
(vedere Cancellazione selettiva). - App che implementano la gestione della configurazione delle
REFRESH_APP_CONFIG
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 vuole restare in ascolto e come implementare un ricevitore di notifiche.
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 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 estendono MAMUserNotification
ulteriormente , che contiene i risultati per i tentativi di registrazione di un utente/dispositivo con il servizio MAM e il risultato del tentativo di correggere rispettivamente la conformità per la CA di Protezione app.
Tipo di notifica | Classe Notification | Motivo della notifica | Applicabilità | Suggerimenti per la gestione | Informazioni sul thread |
---|---|---|---|---|---|
COMPLIANCE_STATUS |
MAMComplianceNotification |
Restituisce il risultato di un tentativo di correzione della conformità. | Le app che implementano la CA di Protezione app devono gestirle. | - | Non deterministica |
MAM_ENROLLMENT_RESULT |
MAMEnrollmentNotification |
Restituisce il risultato di un tentativo di registrazione. | Tutte le app riceveranno questo messaggio. | - | Non deterministica |
MANAGEMENT_REMOVED |
MAMUserNotification |
L'app sta per diventare non gestita. | Le app che usano MAMDataProtectionManager devono gestirlo. |
Vedere MANAGEMENT_REMOVED di seguito. | 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 i dati di configurazione delle app nella cache devono gestirli. | Le app devono invalidare e aggiornare i dati di configurazione delle app memorizzati nella cache. | Non deterministica |
REFRESH_POLICY |
MAMUserNotification |
Protezione di app criteri potrebbero essere stati modificati. | Le app che memorizzano nella cache i criteri di protezione delle app devono gestirlo. | Le app devono invalidare e aggiornare i dati dei criteri di protezione delle app memorizzati nella cache. | Non deterministica |
WIPE_USER_DATA |
MAMUserNotification |
La cancellazione sta per verificarsi(*). | Le app che usano MAMDataProtectionManager devono gestire questo oWIPE_USER_AUXILIARY_DATA . |
Vedere Cancellazione selettiva. | Mai nel thread dell'interfaccia utente |
WIPE_USER_AUXILIARY_DATA |
MAMUserNotification |
La cancellazione sta per verificarsi(*). | Questa operazione verrà ricevuta solo da app multi-identità. Le app che usano MAMDataProtectionManager devono gestire questo oWIPE_USER_DATA . |
Vedere Cancellazione selettiva. | Mai nel thread dell'interfaccia utente |
WIPE_COMPLETED |
MAMUserNotification |
Cancellazione completata. | Sempre facoltativo. | Recapitato dopo WIPE_USER_DATA o WIPE_USER_AUXILIARY_DATA . *Se l'app segnala un errore dal gestore per WIPE_USER_DATA o WIPE_USER_AUXILIARY_DATA , questa notifica non verrà inviata. |
Mai nel thread dell'interfaccia utente |
(*) Le cancellazioni possono verificarsi per molti motivi, ad esempio:
- L'app ha chiamato unregisterAccountForMAM.
- Un amministratore IT ha avviato una cancellazione remota.
- Amministrazione criteri di accesso condizionale richiesti non sono stati soddisfatti.
Avviso
Un'app non deve mai registrarsi per le WIPE_USER_DATA
notifiche e WIPE_USER_AUXILIARY_DATA
.
MANAGEMENT_REMOVED
La MANAGEMENT_REMOVED
notifica informa che l'app sta per diventare non gestita da un account gestito da criteri in precedenza.
Una volta che l'account non è gestito, l'app non sarà più in grado di leggere i file crittografati dell'account, leggere i dati dell'account crittografati con MAMDataProtectionManager
, interagire con gli Appunti crittografati o partecipare in altro modo all'ecosistema di app gestite.
Ciò non richiede la cancellazione dei dati utente o la disconnessione dell'utente (se fosse necessaria una cancellazione, verrebbe inviata una WIPE_USER_DATA
notifica).
Molte app potrebbero non dover gestire questa notifica, ma le app che usano MAMDataProtectionManager
devono gestirla.
Per informazioni dettagliate, vedere Protezione buffer dati.
Quando l'SDK chiama il ricevitore dell'app MANAGEMENT_REMOVED
, sarà vero quanto segue:
L'SDK ha già decrittografato i file crittografati in precedenza (ma non i buffer di dati protetti) appartenenti all'app. I file in posizioni pubbliche nella sdcard che non appartengono direttamente all'app (ad esempio, le cartelle Documenti o Scarica) non vengono decrittografati.
I nuovi file o i buffer di dati protetti creati dal metodo ricevitore (o da qualsiasi altro codice in esecuzione dopo l'avvio del ricevitore) non verranno crittografati.
L'app ha ancora accesso alle chiavi di crittografia, quindi operazioni come la decrittografia dei buffer di dati avranno esito positivo.
Una volta che il ricevitore dell'app viene restituito, non avrà più accesso alle chiavi di crittografia.
Implementazione di MAMNotificationReceiver
Per eseguire la registrazione per le notifiche dall'SDK, l'app deve creare un oggetto MAMNotificationReceiver e registrarlo con MAMNotificationReceiverRegistry.
Per registrare il ricevitore, chiamare registerReceiver
con il ricevitore e il tipo di notifica desiderato nel Application.onCreate
metodo:
@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 verrà richiamato singolarmente per ogni notifica ricevuta e deve restituire un boolean
oggetto .
In genere, questo metodo deve sempre restituire true
, a meno che l'applicazione non abbia riscontrato un errore durante la risposta a una notifica.
Come per altri tipi di ricevitori Android, l'applicazione ha flessibilità nella gestione delle notifiche:
- Può creare implementazioni MAMNotificationReceiver distinte per tipi di notifica distinti (descritto di seguito). In questo caso, assicurarsi di registrare ogni implementazione e ogni tipo di notifica separatamente.
- 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, entrambi devono essere registrati nello stesso tipo di notifica.
Consiglio
È sicuro bloccarsi in MAMNotificationReceiver.onReceive
perché il callback non è in esecuzione nel thread dell'interfaccia utente.
Temi personalizzati
Un tema personalizzato può essere fornito al Intune App SDK. Questo tema personalizzato verrà applicato a tutte le schermate e finestre di dialogo dell'SDK. Se non viene specificato un tema, verrà usato il tema SDK predefinito.
Fornire un tema personalizzato
Per fornire un tema, è necessario aggiungere la riga di codice seguente nel Application.onMAMCreate
metodo :
MAMThemeManager.setAppTheme(R.style.AppTheme);
Nell'esempio precedente è necessario sostituire R.style.AppTheme
con il tema di stile che si vuole applicare all'SDK.
Gestione certificati radice attendibili
Se l'applicazione richiede certificati SSL/TLS emessi da un'autorità di certificazione locale o privata per fornire l'accesso sicuro a siti Web e applicazioni interni, Intune App SDK ha aggiunto il supporto per la gestione dell'attendibilità dei certificati usando le classi API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient.
Nota
MAMCertTrustWebViewClient supporta Android 10 o versione successiva.
Gestione certificati radice attendibili offre il supporto per:
- SSLContext
- SSLSocketFactory
- TrustManager
- WebView
Requisiti
- La gestione certificati radice attendibili richiede una licenza di Microsoft Tunnel per Gestione applicazioni mobili. Per altre informazioni, visitare : Microsoft Tunnel con Gestione applicazioni mobili.
- Configurare i criteri di Intune Configurazione app per distribuire certificati radice attendibili alle app line-of-business e a Edge in Android. Vedere: Usare la VPN di Microsoft Tunnel con i dispositivi Android che non si registrano con Microsoft Intune.
Nota
La gestione certificati radice attendibili può essere usata indipendentemente da Microsoft Tunnel Gateway VPN, tuttavia è necessario concedere in licenza Microsoft MAM Tunnel per l'uso.
Uso di certificati radice attendibili da Intune per stabilire ancoraggi di attendibilità
Gestione certificati radice attendibili consente all'app di usare certificati radice attendibili da Intune in combinazione con i certificati del dispositivo.
Le classi API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient usano i certificati radice attendibili 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 certificati sia del dispositivo che 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 certificati radice attendibili rispetta questa sicurezza aggiuntiva verificando se l'XML di configurazione della sicurezza di rete dell'app dispone di una delle funzionalità seguenti:
- Ancoraggi di attendibilità personalizzati con autorità di certificazione aggiuntive, ad esempio certificati autofirmati.
- Regole specifiche del dominio per limitare le CA attendibili.
- Set di pin per i certificati per domini specifici.
Nota
Altre informazioni sulla configurazione della sicurezza di rete Android sono disponibili all'indirizzo: Configurazione della sicurezza di rete
Se uno di questi si applica a un dominio che viene controllato per l'attendibilità, La gestione certificati radice attendibili ignora i controlli di attendibilità personalizzati per questo dominio e consente solo ai responsabili attendibilità predefiniti della piattaforma di eseguire i controlli.
Classe MAMTrustedRootCertsManager
Questa classe fornisce le API seguenti:
-
createSSLContextForOID(String oid, String protocol)
: crea unSSLContext
oggetto che usa certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. L'oggetto restituitoSSLContext
da questa classe è già inizializzato correttamente conX509TrustManager
gli oggetti che usano i certificati radice attendibili combinati dal dispositivo e dal servizio MAM. -
createSSLSocketFactoryForOID(String oid, String protocol)
: crea unSSLSocketFactory
oggetto che usa certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. All'oggetto restituito viene fattoSSLSocketFactory
riferimento dallo stessoSSLContext
oggetto in questa classe. -
createX509TrustManagersForOID(String oid)
: crea una matrice diX509TrustManager
oggetti che usano i certificati radice attendibili combinati dal dispositivo e dal servizio MAM per l'identità specificata.
Nota
Si oid
prevede che il parametro sia il Microsoft Entra ID utente (OID) per un determinato utente che esegue l'applicazione. Nel caso in cui l'identificatore utente sia sconosciuto in anticipo, è possibile passare un valore Null e MAM tenterà 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 per consentire a MAM di individuare l'identità. Per altre informazioni sull'impostazione dell'identità attiva in un processo o in un thread, visitare: Fase 5: Multi-Identity
Nota
Quando il protocol
parametro non viene fornito, viene usato il protocollo SSL/TLS più supportato nella piattaforma.
Di seguito sono riportati alcuni esempi di utilizzo di questa classe.
Esempio di uso 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 uso 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.WebViewClient
Android che consente di gestire l'errore android.net.http.SslError.SSL_UNTRUSTED
SSL in WebView
. Nella gestione dell'errore, la classe usa certificati radice attendibili configurati in Intune e ricevuti dal servizio MAM per verificare l'attendibilità dell'host dall'URL di destinazione che ha generato l'errore SSL in WebView
. Se l'implementazione personalizzata non gestisce l'errore SSL, verrà richiamato il comportamento predefinito ereditato dalla superclasse. Quando si usa questa classe, è necessario crearne un'istanza e quindi chiamare WebView.setWebViewClient(WebViewClient)
per registrarla con un'istanza WebView
di .
Di seguito è riportato un esempio di utilizzo di questa classe.
Esempio di uso 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
...
Criteri di uscita
Per semplificare i test, vedere Test rapidi con criteri variabili .
Convalida del salvataggio in/apertura da restrizioni
Ignorare se non sono stati implementati criteri per limitare il trasferimento dei dati tra app e dispositivi o posizioni di archiviazione cloud.
Acquisire familiarità con ogni scenario in cui l'app può salvare i dati nei servizi cloud o nei dati locali e aprire i dati dai servizi cloud o dai dati locali.
Per semplicità, questi test presuppongono che l'app includa solo il supporto per il salvataggio e l'apertura di dati da OneDrive for Business da un'unica posizione all'interno dell'app. Tuttavia, devi convalidare ogni combinazione: ogni posizione di salvataggio supportata in ogni posizione dell'app consente il salvataggio dei dati e ogni posizione aperta supportata in ogni posizione in cui l'app consente l'apertura dei dati.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di avviare il test. Inoltre:
- Impostare i criteri dell'account gestito come:
- "Invia dati dell'organizzazione ad altre app" a "App gestite da criteri".
- "Ricevere dati da altre app" a "App gestite da criteri".
Scenario | Condizioni | Procedura |
---|---|---|
Salva in, completamente consentito | Criterio "Salva copie dei dati dell'organizzazione" impostato su "Consenti" | - Passare alla posizione in cui l'app può salvare i dati per OneDrive for Business. - Prova a salvare un documento per OneDrive for Business, nello stesso account gestito connesso all'app. - Verificare che il salvataggio sia consentito. |
Salva in, 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 for Business" |
- Passare alla posizione in cui l'app può salvare i dati per OneDrive for Business. - Prova a salvare un documento per OneDrive for Business, nello stesso account gestito connesso all'app. - Verificare che il salvataggio sia consentito. - Se l'app lo consente, provare a salvare il file in un percorso di archiviazione cloud diverso e verificare che sia bloccato. |
Salva in, bloccato | Criterio "Salva copie dei dati dell'organizzazione" impostato su "Blocca" | - Passare alla posizione in cui l'app può salvare i dati per OneDrive for Business. - Prova a salvare un documento per OneDrive for Business, nello stesso account gestito connesso all'app. - Verificare che il salvataggio sia bloccato. - Se l'app lo consente, provare a salvare il file in un percorso di archiviazione cloud diverso e verificare che sia bloccato. |
Aperto da, completamente consentito | Criterio "Apri dati nei documenti dell'organizzazione" impostato su "Consenti" | - Passare alla posizione in cui l'app può aprire i dati da OneDrive for Business. - Prova ad aprire un documento da OneDrive for Business, dallo stesso account gestito connesso all'archiviazione dell'app. - Verificare che l'apertura sia 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 for Business" |
- Passare alla posizione in cui l'app può aprire i dati da OneDrive for Business. - Prova ad aprire un documento da OneDrive for Business, dallo stesso account gestito connesso all'archiviazione dell'app. - Verificare che l'apertura sia consentita. - Se l'app lo consente, provare ad aprire un altro file da un percorso di archiviazione cloud diverso e verificare che sia bloccato. |
Apri da, bloccato | Criterio "Apri dati nei documenti dell'organizzazione" impostato su "Blocca" | - Passare alla posizione in cui l'app può aprire i dati da OneDrive for Business. - Prova ad aprire un documento da OneDrive for Business, dallo stesso account gestito connesso all'archiviazione dell'app. - Verificare che l'apertura sia bloccata. - Se l'app lo consente, provare ad aprire un altro file da un percorso di archiviazione cloud diverso e verificare che sia bloccato. |
Convalida delle restrizioni delle notifiche
Ignorare se non sono stati implementati criteri per limitare il contenuto all'interno delle notifiche.
Per quanto riguarda i criteri di protezione delle app, l'applicazione può 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 i primi 2 sono rilevanti, poiché non verranno applicate protezioni se l'unico account non è gestito.
Le restrizioni di notifica possono essere convalidate 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 avviare il test. Se l'app è multi-identità, accedere anche all'app con un account non gestito.
Scenario | Condizioni | Procedura |
---|---|---|
Contenuto completo bloccato | Criterio "Notifiche dei dati dell'organizzazione" impostato su "Blocca" | - Attivare l'app per generare una notifica senza dati dell'account. - Verificare che questa notifica non visualizzi alcun contenuto. - Attivare l'app per generare una notifica con i dati dell'account gestito. - Verificare che questa notifica non visualizzi alcun contenuto. - Attivare l'app per generare una notifica con i dati dell'account non gestito. - Verificare che questa notifica non visualizzi alcun contenuto. |
Contenuto parziale bloccato | Criterio "Notifiche dei dati dell'organizzazione" impostato su "Blocca dati dell'organizzazione" | - Attivare l'app per generare una notifica senza dati dell'account. - Verificare che questa notifica visualizzi il contenuto completo. - Attivare l'app per generare una notifica con i dati dell'account gestito. - Verificare che questa notifica eserciti il contenuto dell'account gestito. - Attivare l'app per generare una notifica con i dati dell'account non gestito. - Verificare che questa notifica visualizzi il contenuto completo. |
Nessun contenuto bloccato | Criterio "Notifiche dati organizzazione" impostato su "Consenti" |
Convalida del backup e del ripristino dei dati
Ignorare se non sono stati implementati criteri per la protezione dei dati di backup.
Acquisire di nuovo familiarità con il contenuto (file e/o coppie chiave-valore) configurato per il backup dell'app. È consigliabile verificare che solo il contenuto previsto faccia parte del ripristino. Il contenuto aggiuntivo 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 avviare il test. Se l'app è multi-identità, accedere anche all'app con un account non gestito.
Seguire le istruzioni ufficiali di Android per il test del backup. Queste istruzioni sono diverse per il backup automatico e i backup di chiave/valore, quindi seguire attentamente.
Convalida dell'acquisizione schermata personalizzata in base ai criteri
Ignorare se non sono state implementate restrizioni personalizzate per l'acquisizione dello schermo.
Se l'applicazione ha una funzionalità che ignora il livello FLAG_SECURE
di Window
Android, verificare che questa funzionalità sia bloccata dalle restrizioni di acquisizione della schermata dei criteri di protezione delle app.
Per questi test, installare l'app e il Portale aziendale Intune; accedere con un account gestito prima di avviare il test.
Scenario | Condizioni | Procedura |
---|---|---|
Acquisizione dello schermo bloccata | Criterio "Acquisizione schermo e Google Assistant" impostato su "Blocca" | - Passare alla posizione nell'app che sfrutta il codice FLAG_SECURE personalizzato. - Provare a utilizzare tale funzionalità. - Verificare che la funzionalità sia bloccata. |
Acquisizione dello schermo consentita | Criterio "Acquisizione schermo e Google Assistant" impostato su "Consenti" | - Passare alla posizione nell'app che sfrutta il codice FLAG_SECURE personalizzato. - Provare a utilizzare tale funzionalità. - Verificare che la funzionalità sia consentita. |
Convalida della CA di Protezione app
Ignorare se non è stata implementata la CA di Protezione app di supporto.
Oltre ai passaggi di convalida tipici per la creazione e l'assegnazione di criteri di protezione delle app all'app e all'account di test, è anche necessario creare e assegnare criteri di accesso condizionale di Protezione app all'account di test. Per informazioni dettagliate, vedere Configurare i criteri di accesso condizionale basato su app con Intune.
Procedura di test:
- Disinstallare Microsoft Authenticator e Portale aziendale Intune prima di avviare questo test.
- Installare l'app.
- Accedere all'app con l'account di test destinato sia ai criteri di protezione delle app che ai criteri ca basati su app.
- Verificare che l'app richieda di installare il Portale aziendale.
- Accedere di nuovo.
- Verificare che l'app richieda di registrare il dispositivo. Seguire le istruzioni. Se l'app non richiede la registrazione qui, verificare che il dispositivo di test abbia prima disinstallato altre app abilitate per l'SDK, Portale aziendale e Authenticator. Se questo non viene ancora richiesto, rivedere le istruzioni di implementazione precedenti.
- Verificare di essere in grado di accedere a tutti i dati dell'app dopo la registrazione.
Convalida dei ricevitori di notifiche
Ignorare se non è stata implementata l'opzione Registra per le notifiche dall'SDK.
I passaggi di convalida dipendono dal tipo di notifiche per cui l'app è registrata. Per tutti i tipi di notifiche, aggiungere la registrazione per assicurarsi che il ricevitore venga richiamato correttamente.
MAM_ENROLLMENT_RESULT
può essere attivato semplicemente accedendo all'applicazione con un account destinato ai criteri di protezione delle app.
REFRESH_APP_CONFIG
e REFRESH_POLICY
possono essere attivati aggiornando i rispettivi criteri di Configurazione app e i criteri di protezione delle app destinati all'account di test e attendendo che l'SDK riceva i criteri aggiornati.
Consiglio
Per velocizzare questo processo, vedere Test rapidi con la modifica dei criteri .
MANAGEMENT_REMOVED
, WIPE_USER_DATA
, WIPE_USER_AUXILIARY_DATA
, le WIPE_COMPLETED
notifiche possono essere tutte attivate eseguendo una cancellazione selettiva da Microsoft Intune.
Convalida dei temi personalizzati
Ignorare se non sono stati implementati temi personalizzati.
Il supporto del tema personalizzato può essere convalidato controllando i colori nei dialoghi dell'SDK. La finestra di dialogo più semplice da controllare è la schermata DEL PIN MAM.
Condizioni:
- Impostare i criteri dell'account gestito come:
- "PIN per l'accesso" a "Obbligatorio".
- Installare l'app e il Portale aziendale Intune.
Procedura di test:
- Avviare l'applicazione e accedere con l'account di test.
- Verificare che venga visualizzata la schermata DEL PIN MAM e che il tema sia basato sul tema personalizzato fornito all'SDK.
Operazioni successive
Se questa guida è stata seguita in ordine e sono stati completati tutti i criteri di uscita precedenti, congratulazioni, l'app è ora completamente integrata con Intune App SDK e può applicare i criteri di protezione delle app. Se è stata ignorata una delle sezioni di partecipazione all'app precedenti, Fase 5: Multi-Identity e Fase 6: Configurazione app e non si è certi che l'app debba supportare queste funzionalità, rivedere le decisioni chiave per l'integrazione dell'SDK.
Protezione di app è ora uno scenario di base per l'app. Continuare a fare riferimento a questa guida e all'appendice mentre si continua a sviluppare l'app.