Intune App SDK per Android - Funzionalità di partecipazione alle app

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

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:

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 esempio o getPolicyForIdentity(final String identity).

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. 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 alle app di Intune App SDK per consentire agli amministratori IT di bloccare il salvataggio o l'apertura.

Salvataggio nel dispositivo o nell'archiviazione cloud

L'API getIsSaveToLocationAllowed consente all'app di sapere se il salvataggio in determinate posizioni è consentito per una determinata identità, in base ai criteri configurati:

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(
SaveLocation service, String username);

Per determinare se l'app deve implementare il getIsSaveToLocationAllowed controllo, determinare se l'app supporta l'uscita dei dati esaminando la tabella seguente:

service Parametro: SaveLocation valore enumerazione Caso d'uso Nome utente associato
ONEDRIVE_FOR_BUSINESS L'app salva i dati in OneDrive. Oggetto username per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente non è noto, usare null.
SHAREPOINT L'app salva i dati in Sharepoint. Oggetto username per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente non è noto, usare null.
BOX Questa app salva i dati in Box. Oggetto username per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente 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 username.
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 username.
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à. Oggetto username per un account usato per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente 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 username 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 getIsSaveToLocationAllowed. Verificare la presenza di SaveLocation.LOCAL

  1. File salvati all'esterno dell'archiviazione di app private.
  2. 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

Quando si verificano i criteri di salvataggio, username deve essere l'UPN/nome utente/messaggio di posta elettronica 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 getIsOpenFromLocationAllowed consente all'app di sapere se l'apertura da determinate posizioni è consentita per una determinata identità, in base ai criteri configurati:

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowed(
OpenLocation location, String username);

Per determinare se l'app deve implementare il getIsOpenFromLocationAllowed controllo, determinare se l'app supporta l'ingresso dati esaminando la tabella seguente:

location Parametro: OpenLocation valore enumerazione Caso d'uso Nome utente associato
ONEDRIVE_FOR_BUSINESS L'app sta aprendo i dati da OneDrive. Oggetto username per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente non è noto, usare null.
SHAREPOINT L'app sta aprendo i dati da Sharepoint. Oggetto username per un account usato sia per l'autenticazione del servizio cloud che per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente 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 username 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,username deve essere l'identità del proprietario del file.
- Per i file senza tag identity,username 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 username.
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à. Oggetto username per un account usato per l'autenticazione Microsoft Entra. Se tale nome utente non esiste o il nome utente 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 username non viene valutato per questa posizione e quindi deve essere null.

Nota

Quando si verificano i criteri aperti, username deve essere l'UPN/nome utente/messaggio di posta elettronica associato al file o al servizio cloud da cui viene aperto (non necessariamente lo stesso 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. Il termine per l'applicazione dei criteri è funzionalmente identico alla chiamata AppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username) , ma gestisce l'analisi del proprietario del username 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 isSaveToAllowedForLocation chiamata API o isOpenFromAllowedForLocation 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.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

L'enumerazione restituita NotificationRestriction ha i valori seguenti:

NotificationRestriction Enum 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 , 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 getNotificationRestrictioncorrettamente , 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

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 di 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:allowBackupsu 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:allowBackuptrue ed eseguire i passaggi aggiuntivi seguenti:

  1. Se l'app non usa un proprio oggetto personalizzato BackupAgent, usa l'agente MAMBackupAgent predefinito per consentire backup completi automatici conformi ai criteri di Intune. Inserire quanto segue nel manifesto dell'app:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [Facoltativo] Se è stato implementato un oggetto personalizzato BackupAgentfacoltativo, è 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.

  3. 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.

  4. È quindi necessario copiare il valore per android:fullBackupContent nel com.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'API com.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 backup BackupAgent automatici completi e conformi ai criteri di Intune personalizzati e opt-out, 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 integrazione MAM di Intune BackupAgentHelper consente allo sviluppatore di registrare interi file e preferenze condivise in e FileBackupHelperSharedPreferencesBackupHelper (rispettivamente) che vengono quindi aggiunti a BackupAgentHelper al momento della creazione. Seguire la procedura seguente per usare un backupAgentHelper con MAM di Intune:

  1. Per usare il backup con più identità con , BackupAgentHelperseguire la guida di Android all'estensione di BackupAgentHelper.

  2. 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. Dal momento che la maggior parte del lavoro viene eseguita su di te, lo sviluppatore, l'integrazione di Intune è leggermente più coinvolta.

Integrare MAM:

  1. 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.

  2. Fare in modo che la classe estenda MAMBackupAgent.

Backup multi-identità:

  1. 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.

  2. 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 in BackupDataOutput . 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:

  1. È necessario usare un while(data.readNextHeader())ciclo * per passare attraverso le entità di backup.

  2. È necessario chiamare data.skipEntityData()se data.getKey() non corrisponde alla chiave scritta in onBackup. Senza eseguire questo passaggio, i ripristini potrebbero non riuscire.

  3. 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 WindowAndroid, è 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 di Intune. Microsoft Entra ID impone questa operazione 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 sotto gestione per soddisfare le condizioni per Microsoft Entra ID per 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 di Intune App SDK ha già illustrato diversi scenari in cui l'app potrebbe essere necessaria per la registrazione per le notifiche dall'SDK, ad esempio:

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à, che possono essere recuperate tramite la getUserIdentity() funzione .

MAMEnrollmentNotification e MAMComplianceNotification estendono MAMUserNotificationulteriormente , 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 booleanoggetto . 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 a 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

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 i 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 i certificati 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 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:

  • createSSLContext(String identity, String protocol): crea un SSLContext oggetto che usa certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. L'oggetto restituito SSLContext da questa classe è già inizializzato correttamente con X509TrustManager gli oggetti che usano i certificati radice attendibili combinati dal dispositivo e dal servizio MAM.
  • createSSLSocketFactory(String identity, String protocol): crea un SSLSocketFactory oggetto che usa certificati radice attendibili per l'identità specificata e il protocollo SSL/TLS specificato. All'oggetto restituito viene fatto SSLSocketFactory riferimento dallo stesso SSLContext oggetto in questa classe.
  • createX509TrustManagers(String identity): crea una matrice di X509TrustManager oggetti che usano i certificati radice attendibili combinati dal dispositivo e dal servizio MAM per l'identità specificata.

Nota

Si prevede che il identity parametro sia un identificatore di stringa per un determinato utente che esegue l'applicazione, ad esempio il relativo UPN. 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.createSSLSocketFactory(identity, "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.createX509TrustManagers(identity);

// 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:

  1. Notifiche che non contengono dati dell'account.
  2. Notifiche che contengono dati appartenenti a un account gestito.
  3. 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_SECUREdi WindowAndroid, 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:

  1. Disinstallare Microsoft Authenticator e Portale aziendale Intune prima di avviare questo test.
  2. Installare l'app.
  3. Accedere all'app con l'account di test destinato sia ai criteri di protezione delle app che ai criteri ca basati su app.
  4. Verificare che l'app richieda di installare il Portale aziendale.
  5. Accedere di nuovo.
  6. 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.
  7. 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_CONFIGe 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:

  1. Avviare l'applicazione e accedere con l'account di test.
  2. 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.