Share via


Intune App SDK per Android - Informazioni di base sull'integrazione MAM

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, esaminare la fase 1: Pianificare l'integrazione.

Fase 4: Mam Integration Essentials

Fase Goals

  • Abilitare la modalità strict MAM.
  • Eseguire la registrazione per le notifiche critiche dall'SDK.
  • Implementare e registrare un callback di autenticazione per fornire token Microsoft Entra da MSAL all'SDK.
  • Registrare nuovi account per la gestione MAM dopo l'autenticazione con MSAL.
  • Annullare la registrazione degli account al disconnessione per rimuovere i dati aziendali.
  • (Scelta consigliata) Incorporare l'accesso MAM nell'app.
  • (Scelta consigliata) Informazioni su come usare la finestra di dialogo di diagnostica dell'SDK.

Background

Ora che Intune App SDK è stato scaricato, integrato nella compilazione ed è stato eseguito correttamente l'esecuzione di sostituzioni di classi e metodi, è il momento di apportare le modifiche di codice essenziali per iniziare a applicare le impostazioni dei criteri di protezione delle app per gli account protetti da MAM.

Questa fase indica come eseguire l'hook nella registrazione dell'SDK, richiamare una finestra di dialogo di diagnostica, abilitare la modalità MAM Strict per identificare i possibili bug di integrazione, registrarsi per le notifiche dall'SDK e, soprattutto, come registrare un account per Mam di Intune per avviare la ricezione dei criteri.

Modalità strict MAM

Mam Strict Mode può identificare potenziali bug nell'integrazione dell'applicazione di Intune App SDK. Questi bug di integrazione possono causare errori nell'applicazione corretta dei criteri di protezione delle app e lasciare i dati aziendali non protetti. Di conseguenza, è necessario l'utilizzo della modalità strict MAM.

La modalità MAM Strict cerca anomalie nell'uso delle API MAM e delle API della piattaforma con restrizioni MAM nell'applicazione. Liberamente modellato dopo StrictMode di Android, la modalità STRICT MAM esegue un set predefinito di controlli che generano errori di runtime quando hanno esito negativo. La modalità strict MAM non deve essere lasciata abilitata nelle build di produzione; usarlo invece nelle build di sviluppo, debug e/o dogfood interne dell'app.

Per abilitare la modalità strict MAM, chiamare

MAMStrictMode.enable();

all'inizio dell'inizializzazione dell'applicazione , ad esempio . Application.onCreate

Quando un controllo mam strict mode ha esito negativo, prova a determinare se si tratta di un problema reale che può essere risolto nella tua app o un falso positivo. Se si ritiene che si tratti di un falso positivo o non si è sicuri, comunicare al team MAM di Intune. Questo ci consentirà di essere certi di essere d'accordo con la determinazione del falso positivo e di tentare di migliorare il rilevamento per le versioni future. Per eliminare i falsi positivi, disabilitare il controllo non riuscito seguendo le istruzioni riportate di seguito.

Gestione delle violazioni

Quando un controllo ha esito negativo, esegue UN MAMStrictViolationHandler. Il gestore predefinito genera un oggetto Error, che dovrebbe arrestarsi in modo anomalo l'app. Ciò consente di rendere gli errori il più rumorosi possibile e si adatta all'intenzione di non abilitare la modalità strict nelle build di produzione.

Se l'app vuole gestire le violazioni in modo diverso, può fornire il proprio gestore chiamando:

MAMStrictMode.global().setHandler(handler);

dove handler implementa MAMStrictViolationHandler.

Eliminazione dei controlli

Se un controllo non riesce in una situazione in cui l'app non esegue alcuna operazione errata, segnalarla come indicato in precedenza. Nel frattempo, potrebbe essere necessario disabilitare il controllo che rileva un falso positivo, almeno in attesa di un SDK aggiornato. Il controllo che non è riuscito verrà visualizzato nell'errore generato dal gestore predefinito o verrà passato a un gestore personalizzato se impostato.

Anche se le eliminazioni possono essere eseguite a livello globale, è preferibile disabilitare temporaneamente per thread nel sito di chiamata specifico. Gli esempi seguenti illustrano vari modi per disabilitare MAMStrictCheck.IDENTITY_NO_SUCH_FILE (generato se viene effettuato un tentativo di proteggere un file che non esiste).

eliminazione temporanea Per-Thread

Questo è il meccanismo di eliminazione preferito.

try (StrictScopedDisable disable = MAMStrictMode.thread().disableScoped(MAMStrictCheck.IDENTITY_NO_SUCH_FILE)) {
    // Perform the operation which raised a violation here
}
// The check is no longer disabled once the block exits

Per-Thread eliminazione permanente

MAMStrictMode.thread().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Eliminazione globale (a livello di processo)

MAMStrictMode.global().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Eseguire la registrazione per le notifiche dall'SDK

Intune App SDK invia molti tipi diversi di notifiche per informare le applicazioni delle operazioni di gestione sensibili al tempo. L'applicazione può registrarsi per una di queste notifiche e intervenire durante la ricezione.

Ad esempio, ogni volta che un amministratore IT invia un comando di cancellazione selettiva per un dispositivo, il servizio Intune invia una notifica all'SDK, che viene passata all'applicazione come WIPE_USER_DATA. L'applicazione può restare in ascolto di questa notifica e controllare quali dati vengono cancellati; oppure può basarsi sul comportamento di cancellazione predefinito dell'SDK.

Molte delle notifiche sono facoltative. A seconda delle funzionalità sdk usate dall'applicazione, potrebbero essere necessarie alcune notifiche. Vedere Registrare le notifiche dall'SDK nella fase 7: Funzionalità di partecipazione alle app per informazioni dettagliate su come registrarsi per le notifiche, quali notifiche vengono recapitato dall'SDK e su come gestire tipi di notifica specifici.

Registrazione per i criteri di protezione delle app

Quando gli amministratori creano criteri di protezione delle app, questi criteri sono destinati a account specifici nell'organizzazione. Nel client, l'SDK deve conoscere l'account che usa l'applicazione in modo che possa recuperare i criteri dell'account e applicare le impostazioni in modo appropriato. L'app è responsabile di fornire all'SDK queste informazioni sull'account. Questo processo è denominato registrazione.

Ogni volta che l'app aggiunge un nuovo account, deve registrare l'account con l'SDK, anche se altri account sono già registrati. L'app può registrare più account. Tuttavia, attualmente è possibile registrare un solo account o applicare criteri di protezione delle app. In Android questa limitazione dell'account gestito singolo è a livello di dispositivo.

Registrazione e registrazione

La registrazione è il processo in cui l'app informa l'SDK che è in uso un nuovo account. L'SDK contiene funzioni che l'app deve chiamare per registrare e annullare la registrazione degli account.

La registrazione è il processo in cui l'SDK registra l'account registrato con il servizio Intune in modo che possa applicare i criteri dell'account. L'app non deve chiamare alcuna funzione per la registrazione. L'SDK gestisce completamente la registrazione dopo la registrazione di un account.

Se un account è già registrato per l'applicazione, quando registra un altro account, anche se l'account è destinato ai criteri di protezione delle app, il secondo account non verrà registrato e i criteri non verranno applicati.

Nota

Il termine "registrazione" può anche fare riferimento alla registrazione MDM a livello di dispositivo Altre informazioni nell'appendice della registrazione MDM e MAM.

Implementazione della registrazione

Attenzione

Se l'app non integra MSAL (scelta consigliata), vedere Registrazione predefinitanell'appendice anziché continuare questa sezione.

L'app deve apportare tre modifiche al codice per registrare correttamente un account:

  1. L'app deve implementare e registrare un'istanza dell'interfaccia MAMServiceAuthenticationCallback . L'istanza di callback deve essere registrata nel onCreate() metodo (o onMAMCreate()) della sottoclasse Application.

  2. Quando viene creato un account e l'utente accede correttamente con MSAL, l'app deve chiamare registerAccountForMAM.

  3. Quando un account viene rimosso, l'app deve chiamare unregisterAccountForMAM per rimuovere l'account dalla gestione di Intune.

    Attenzione

    La chiamata può avviare una cancellazione per rimuovere completamente i dati aziendali per l'account.

Tutte le API di autenticazione e registrazione necessarie sono disponibili nell'interfaccia MAMEnrollmentManager . Un riferimento a MAMEnrollmentManager può essere ottenuto come segue:

MAMEnrollmentManager mgr = MAMComponents.get(MAMEnrollmentManager.class);

// make use of mgr

È garantito che l'istanza MAMEnrollmentManager restituita non sia Null. I metodi DELL'API rientrano in due categorie: autenticazione e registrazione dell'account.

MAMEnrollmentManager e autenticazione

L'SDK comunica spesso con il servizio Intune: per la registrazione degli account registrati, per ottenere gli aggiornamenti alle impostazioni dei criteri di protezione delle app e per ottenere azioni di amministratore in sospeso, ad esempio la cancellazione selettiva dei dati protetti all'interno dell'app. Per comunicare correttamente con il servizio Intune, l'SDK richiede nuovi token di accesso da app con MSAL integrato.

Se l'SDK non è in grado di recuperare un nuovo token, non sarà in grado di comunicare con il servizio Intune, il che può ritardare il recupero e l'applicazione di nuove impostazioni dei criteri o azioni di amministratore. È fondamentale che l'app completi questi passaggi per garantire un'applicazione uniforme dei criteri.

Nella fase 2 è stato integrato MSAL nell'applicazione per l'autenticazione e l'acquisizione di token di accesso. In questo caso si implementerà un callback di autenticazione per consentire all'SDK di richiedere i token necessari.

MAMEnrollmentManager dispone dei metodi di autenticazione seguenti:

interface MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String resourceId);
}
interface MAMServiceAuthenticationCallbackExtended extends MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String tenantId, String authority, String resourceId);
}
void registerAuthenticationCallback(MAMServiceAuthenticationCallback callback);
void updateToken(String upn, String aadId, String resourceId, String token);
  1. L'app deve implementare l'interfaccia MAMServiceAuthenticationCallback o l'interfaccia MAMServiceAuthenticationCallbackExtended per consentire all'SDK di richiedere un token Microsoft Entra per l'account e l'ID risorsa specificati. L'istanza di callback deve essere fornita a MAMEnrollmentManager chiamando il relativo metodo registerAuthenticationCallback . Potrebbe essere necessario un token all'inizio del ciclo di vita dell'app per i tentativi di registrazione o le archiviazioni dei criteri di protezione delle app, quindi il callback deve essere registrato nel onCreate() metodo (o onMAMCreate()) della sottoclasse dell'app Application .

  2. Il acquireToken metodo deve acquisire il token di accesso per l'ID risorsa richiesto per l'account specificato. Se non è in grado di acquisire il token richiesto, deve restituire Null.

    Consiglio

    Assicurarsi che l'app utilizzi i resourceId parametri e aadId passati a acquireToken() in modo che venga acquisito il token corretto. Deve resourceId essere usato per generare gli ambiti appropriati e aadId deve essere usato per passare l'account corretto. Se l'app ha bisogno dell'autorità Microsoft Entra per acquisire correttamente il token, implementare l'interfaccia MAMServiceAuthenticationCallbackExtended .

    class MAMAuthCallback implements MAMServiceAuthenticationCallback {
        public String acquireToken(String upn, String aadId, String resourceId) {
            final String[] scopes = {resourceId + "/.default"};
    
            final IAccount account = getAccount(aadId);
            if (account == null) {
                callback.onError(
                        new MsalUiRequiredException(MsalUiRequiredException.NO_ACCOUNT_FOUND, "no account found for " + aadId));
                return;
            }
    
            AcquireTokenSilentParameters params =
                new AcquireTokenSilentParameters.Builder()
                        .forAccount(account)
                        .fromAuthority(account.getAuthority())
                        .withScopes(Arrays.asList(scopes))
                        .withCallback(callback)
                        .build();
    
            return mMsalClientApplication.acquireTokenSilent(params);
        }
    
        private static IAccount getAccount(String aadId) throws InterruptedException, MsalException {
          IAccount account = null;
    
          if (mMsalClientApplication instanceof IMultipleAccountPublicClientApplication) {
              IMultipleAccountPublicClientApplication multiAccountPCA =
                      (IMultipleAccountPublicClientApplication) mMsalClientApplication;
    
              account = multiAccountPCA.getAccount(aadId);
          } else {
              ISingleAccountPublicClientApplication singleAccountPCA =
                      (ISingleAccountPublicClientApplication) mMsalClientApplication;
    
              ICurrentAccountResult accountResult = singleAccountPCA.getCurrentAccount();
              if (accountResult != null) {
                  account = accountResult.getCurrentAccount();
                  // make sure this is the correct user
                  if (account != null && !account.getId().equals(aadId))
                      account = null;
              }
          }
          return account;
      }
    }
    
  3. Nel caso in cui l'app non sia in grado di fornire un token quando l'SDK chiama acquireToken() , ad esempio se l'autenticazione invisibile all'utente non riesce ed è un momento scomodo per visualizzare un'interfaccia utente, l'app può fornire un token in un secondo momento chiamando il metodo updateToken . Lo stesso UPN, id Microsoft Entra e ID risorsa richiesti dalla chiamata precedente a acquireToken() devono essere passati a updateToken(), insieme al token che è stato infine acquisito. L'app deve chiamare questo metodo il prima possibile dopo aver restituito Null dal callback fornito.

    Avviso

    Non chiamare updateToken() dall'interno dell'implementazione di acquireToken(). updateToken() deve essere usato nel caso in cui acquireToken() non sia in grado di acquisire un token.

    Nota

    L'SDK chiamerà acquireToken() periodicamente per ottenere il token, quindi la chiamata updateToken() non è strettamente necessaria. Tuttavia, è fortemente consigliato perché consente di completare tempestivamente le registrazioni e le archiviazioni dei criteri di protezione delle app.

Note sull'implementazione dell'autenticazione

  • Le app sono incoraggiate ad acquisire token Microsoft Entra prima di chiamare registerAccountForMAM. Dopo aver registrato un account, le app riceveranno un callback al metodo del acquireToken() registrato MAMServiceAuthenticationCallbackin un thread diverso. Se si specifica un token valido in tale callback, la registrazione può continuare. L'app otterrà il risultato della registrazione tramite notifica.

  • Se l'app non restituisce un token di Microsoft Entra valido, il risultato finale del tentativo di registrazione sarà AUTHORIZATION_NEEDED. Se l'app riceve questo risultato tramite notifica, è consigliabile accelerare il processo di registrazione acquisendo il token per l'account e la risorsa precedentemente richiesti da acquireToken e chiamando il metodo updateToken per avviare nuovamente il processo di registrazione.

  • L'app registrata MAMServiceAuthenticationCallback verrà chiamata anche per acquisire un token per le archiviazioni periodiche dei criteri di protezione delle app. Se l'app non è in grado di fornire un token quando richiesto, non riceverà una notifica, ma dovrebbe tentare di acquisire un token e chiamare updateToken() al momento opportuno successivo per accelerare il processo di archiviazione. Se non viene fornito un token, il callback potrebbe comunque essere chiamato al successivo tentativo di archiviazione.

  • Il supporto per i cloud sovrani richiede di fornire l'autorità.

  • Se MAMServiceAuthenticationCallbackExtended l'interfaccia viene implementata, il metodo ereditato acquireToken() da MAMServiceAuthenticationCallback non deve essere implementato, in quanto l'interfaccia MAMServiceAuthenticationCallbackExtended fornisce un'implementazione predefinita.

MAMEnrollmentManager e registrazione

Ogni volta che l'app aggiunge un account, deve registrare l'account con l'SDK. Analogamente, ogni volta che l'app rimuove un account, deve annullare la registrazione di tale account per indicare che l'app non deve più applicare i criteri per tale account. Se l'account è stato registrato nel servizio MAM, l'account verrà annullato e l'app verrà cancellata.

MAMEnrollmentManager ha i metodi di registrazione dell'account seguenti:

void registerAccountForMAM(String upn, String aadId, String tenantId);
void registerAccountForMAM(String upn, String aadId, String tenantId, String authority);
void unregisterAccountForMAM(String upn, String aadId);
Result getRegisteredAccountStatus(String upn, String aadId);
  1. Per registrare un account per la gestione, l'app deve chiamare registerAccountForMAM(). Un account viene identificato sia dall'UPN che dall'ID utente Microsoft Entra. L'ID tenant è necessario anche per associare i dati di registrazione al tenant Microsoft Entra dell'account. L'autorità dell'account può anche essere fornita per consentire la registrazione su cloud sovrani specifici; Per altre informazioni, vedere Registrazione del cloud sovrano. L'SDK potrebbe tentare di registrare l'app per l'account specificato nel servizio MAM; se la registrazione non riesce, la registrazione verrà ritentata periodicamente fino a quando la registrazione non riesce o l'account non viene registrato. Il periodo di ripetizione dei tentativi sarà in genere di 12-24 ore. L'SDK fornisce lo stato dei tentativi di registrazione in modo asincrono tramite notifiche.

  2. Il momento migliore per chiamare registerAccountForMAM è dopo che l'utente ha eseguito l'accesso all'app ed è stato autenticato correttamente usando MSAL. L'ID utente e l'ID tenant Microsoft Entra dell'account vengono restituiti dalla chiamata di autenticazione MSAL come parte dell'oggetto IAccount correlato a IAuthenticationResult.

    • L'account proviene dal IAuthenticationResult.getAccount() metodo e contiene le informazioni relative all'account.
    • L'ID AAD proviene dal IAccount.getId() metodo .
    • L'ID tenant proviene dal IAccount.getTenantId() metodo .
    • L'autorità proviene dal IAccount.getAuthority() metodo .
  3. Per annullare la registrazione di un account dalla gestione di Intune, l'app deve chiamare unregisterAccountForMAM(). Se l'account è stato registrato correttamente e viene gestito, l'SDK annulla la registrazione dell'account e cancella i dati. I tentativi di registrazione periodici per l'account verranno arrestati. L'SDK fornisce lo stato delle richieste di annullamento della registrazione in modo asincrono tramite notifica.

Note sull'implementazione della registrazione

  • I metodi di registrazione sono idempotenti. Ad esempio, registerAccountForMAM registrerà un account e tenterà di registrare l'app solo se l'account non è già registrato e unregisterAccountForMAM annulla la registrazione di un account solo se è attualmente registrato. Le chiamate successive sono no-ops, quindi non c'è alcun danno nel chiamare questi metodi più di una volta.

  • Non esiste alcuna garanzia che ogni chiamata di registrazione/annullamento della registrazione abbia una notifica dei risultati corrispondente. Ad esempio, se registerAccountForMAM() viene chiamato per un account già registrato, la notifica potrebbe non essere inviata di nuovo per tale identità. In alternativa, l'SDK può inviare notifiche anche quando l'app non ha chiamato questi metodi, poiché l'SDK può tentare periodicamente le registrazioni in background e le registrazioni potrebbero essere attivate dalle richieste di cancellazione ricevute dal servizio Intune.

  • I metodi di registrazione possono essere chiamati per un numero qualsiasi di account diversi, ma attualmente solo un account può essere registrato correttamente. Se più account concessi in licenza per Intune e destinati ai criteri di protezione delle app vengono registrati contemporaneamente o quasi, non c'è alcuna garanzia su quale vincerà la gara.

  • È possibile eseguire una query su MAMEnrollmentManager per verificare se un determinato account è registrato e per ottenere lo stato corrente usando il metodo getRegisteredAccountStatus . Se l'account specificato non è registrato, questo metodo restituirà Null. Se l'account è registrato, questo metodo restituirà lo stato dell'account come uno dei membri dell'enumerazione MAMEnrollmentManager.Result .

Registrazione del cloud sovrano

Azure supporta più cloud fisicamente isolati, noti come cloud sovrani o nazionali. Se l'applicazione è in grado di riconoscere il cloud sovrano, deve fornire il authority parametro a registerAccountForMAM().

Linee guida MSAL

Per MSAL, impostare su multiple_clouds_supported nel file di trueconfigurazione MSAL.

{
  "multiple_clouds_supported": true,
}

Risultati della registrazione e codici di stato

Quando un account viene registrato per la prima volta, inizia nello PENDING stato , a indicare che il tentativo di registrazione iniziale del servizio MAM è incompleto. Al termine del tentativo di registrazione, verrà inviata una notifica con uno dei codici risultato nella tabella seguente. Inoltre, il metodo getRegisteredAccountStatus restituirà lo stato dell'account in modo che l'app possa sempre determinare se a tale account sono applicati criteri di protezione delle app. Se il tentativo di registrazione non riesce, lo stato dell'account può cambiare nel tempo quando l'SDK ripete la registrazione in background.

Codice risultato Spiegazione
AUTHORIZATION_NEEDED Questo risultato indica che un token non è stato fornito dall'istanza MAMServiceAuthenticationCallback registrata dell'app o che il token specificato non è valido. L'app deve acquisire un token valido e chiamare updateToken , se possibile.
NOT_LICENSED L'account non è concesso in licenza per Intune o il tentativo di contattare il servizio MAM di Intune non è riuscito. L'app deve continuare in uno stato non gestito (normale) e l'utente non deve essere bloccato. Le registrazioni verranno ritentata periodicamente nel caso in cui l'account venga concesso in licenza in futuro.
ENROLLMENT_SUCCEEDED Il tentativo di registrazione è riuscito o l'account è già registrato. In caso di registrazione riuscita, prima di questa notifica verrà inviata una notifica di aggiornamento dei criteri. L'accesso ai dati aziendali deve essere consentito.
ENROLLMENT_FAILED Tentativo di registrazione non riuscito. Ulteriori dettagli sono disponibili nei log del dispositivo. L'app non deve consentire l'accesso ai dati aziendali in questo stato, poiché in precedenza è stato determinato che l'account è concesso in licenza per Intune. Tutte le app devono assicurarsi che l'accesso ai dati aziendali non sia autorizzato, fino a quando non ENROLLMENT_SUCCEEDED viene ottenuto dall'app.
WRONG_USER Solo un account per dispositivo può registrare un'app con il servizio MAM. Questo risultato indica che l'account per cui è stato recapitato questo risultato (il secondo account) è destinato ai criteri MAM, ma è già registrato un account diverso. Poiché i criteri MAM non possono essere applicati per il secondo account, l'app non deve consentire l'accesso ai dati di questo account (possibilmente rimuovendo l'account dall'app) a meno che/fino a quando la registrazione per questo account non abbia esito positivo in un secondo momento. Contemporaneamente alla distribuzione di questo WRONG_USER risultato, MAM richiederà l'opzione per rimuovere l'account esistente. Se l'utente umano risponde in modo affermativo, sarà effettivamente possibile registrare il secondo account poco tempo dopo. Finché il secondo account rimane registrato, MAM ritenterà la registrazione periodicamente.
UNENROLLMENT_SUCCEEDED L'annullamento della registrazione ha avuto esito positivo.
UNENROLLMENT_FAILED La richiesta di annullamento della registrazione non è riuscita. Ulteriori dettagli sono disponibili nei log del dispositivo. In generale, ciò non si verifica finché l'app passa un UPN valido (né null né vuoto). Non esiste alcuna correzione diretta e affidabile che l'app può eseguire. Se questo valore viene ricevuto quando si annulla la registrazione di un UPN valido, segnalare come bug al team MAM di Intune.
PENDING Il tentativo di registrazione iniziale per l'account è in corso. L'app può bloccare l'accesso ai dati aziendali fino a quando il risultato della registrazione non è noto, ma non è necessario.
COMPANY_PORTAL_REQUIRED L'account è concesso in licenza per Intune, ma l'app non può essere registrata fino a quando l'app Portale aziendale non viene installata nel dispositivo. Intune App SDK tenterà di bloccare l'accesso all'app per l'account specificato e li instrada a installare l'app Portale aziendale. Quando si invia questa notifica all'app, Intune App SDK visualizzerà un'interfaccia utente non bloccante sopra l'attività corrente se l'attività è attualmente visibile all'utente o viene chiamata la volta onResume successiva. Se l'utente annulla l'interfaccia utente senza blocchi, Intune App SDK mostrerà un'interfaccia utente di blocco la volta onCreate successiva che viene chiamata per un'attività e l'identità corrente viene gestita (vedere di seguito per informazioni dettagliate sulla risoluzione dei problemi).

La registrazione deve essere inizializzata in anticipo per ottenere il massimo valore dai dati registrati. Application.onMAMCreate() è in genere la posizione migliore per inizializzare la registrazione.

Per ricevere i log MAM nell'app, creare un gestore Java e aggiungerlo a MAMLogHandlerWrapper. Verrà richiamato publish() nel gestore dell'applicazione per ogni messaggio di log.

/**
 * Global log handler that enables fine grained PII filtering within MAM logs.  
 * To start using this you should build your own log handler and add it via
 * MAMComponents.get(MAMLogHandlerWrapper.class).addHandler(myHandler, false);  
 * You may also remove the handler entirely via
 * MAMComponents.get(MAMLogHandlerWrapper.class).removeHandler(myHandler);
 */
public interface MAMLogHandlerWrapper {
    /**
     * Add a handler, PII can be toggled.
     * @param handler handler to add.
     * @param wantsPII if PII is desired in the logs.    
     */
    void addHandler(final Handler handler, final boolean wantsPII);

    /**
     * Remove a handler.
     * @param handler handler to remove.
     */
    void removeHandler(final Handler handler);
}

Nota

PiI è l'acronimo di "informazioni personali" e può includere dati come nomi utente e UPN. È consigliabile escludere tali informazioni personali nei propri log di produzione. Per altri dettagli, vedere l'Informativa sulla privacy di Microsoft .

L'app Portale aziendale Intune offre più opzioni per la raccolta di informazioni di diagnostica. Il Portale aziendale include un'interfaccia utente che:

  • Consente agli utenti finali di raccogliere Portale aziendale log.
  • Visualizza i metadati del dispositivo e dell'account.
  • Include informazioni per app sui criteri MAM correnti.

Informazioni sull'app Intune dell'interfaccia utente di diagnostica di Intune

Per una spiegazione dettagliata dei dati inclusi nei log Portale aziendale e nell'interfaccia utente di diagnostica, vedere Informazioni sui log di Portale aziendalenell'appendice.

Consiglio

Se si esegue il test con un account a cui devono essere applicati criteri MAM, ma la diagnostica non visualizza alcun criterio per il nome del pacchetto dell'app, vedere la sezione Risoluzione dei problemi di seguito.

Le app possono avviare questa interfaccia utente di diagnostica richiamando MAMPolicyManager.showDiagnostics(context). Gli utenti finali possono anche avviare la console di diagnostica del Portale aziendale tramite Microsoft Edge immettendo about:intunehelp nella barra degli indirizzi. Si tratta di una funzionalità facoltativa che può essere utile per il debug.

Queste informazioni di diagnostica sono disponibili solo quando il Portale aziendale è installato nel dispositivo. Viene visualizzata una finestra di dialogo di avviso ogni volta che showDiagnostics viene chiamato senza il Portale aziendale installato.

Criteri di uscita

A questo punto dell'integrazione, l'app può ora ricevere e applicare i criteri di protezione delle app. Eseguire i test seguenti per convalidare l'integrazione.

Primo test dell'applicazione dei criteri

Eseguire prima di tutto il test seguente per acquisire familiarità con l'esperienza utente finale completa dell'applicazione dei criteri all'interno dell'app:

  1. Creare criteri di protezione delle app Android nell'interfaccia di amministrazione di Microsoft Intune (per informazioni dettagliate, vedere Creazione di criteri di protezione delle app Android di test nella fase 1). Per questo test, configurare i criteri:
    • In Protezione dati impostare "Acquisizione schermo e Google Assistant" su "Blocca".
    • In Requisiti di accesso lasciare le impostazioni predefinite. In particolare, "PIN for Access" deve essere "Require".
  2. Verificare che i criteri di protezione delle app siano destinati all'applicazione. È probabile che sia necessario aggiungere manualmente il nome del pacchetto nella creazione guidata dei criteri.
  3. Assegnare i criteri di protezione delle app a un gruppo di utenti contenente l'account di test.
  4. In un dispositivo Android di test disinstallare altre app integrate nell'SDK, ad esempio Microsoft Outlook, Teams, OneDrive e Office. Disinstallare anche l'app Portale aziendale Intune e l'app Microsoft Authenticator.
    • Consiglio

      La disinstallazione di altre app integrate nell'SDK consente di verificare che si stia testando esclusivamente l'integrazione dell'app.

  5. Installare l'applicazione.
  6. Accedere all'applicazione con l'account di test destinato ai criteri di protezione delle app.
  7. Verificare che venga richiesto di installare il Portale aziendale Intune da Google Play.
    • Nota

      Se il dispositivo di test non dispone dell'app Google Play Store, verificare che venga richiesto di installare il Portale aziendale Intune da un altro app store o da un sito Web Microsoft.

  8. Installare il Portale aziendale. Non è necessario avviare il Portale aziendale o accedere al Portale aziendale.
  9. Tornare all'app e accedere di nuovo, se necessario.
  10. Verificare che venga visualizzata una schermata Ottieni accesso. Ciò indica che l'SDK ha recuperato correttamente i criteri per questo account.
  11. Verrà richiesto di impostare un PIN dell'app. Creare un PIN.
  12. Esplorare l'applicazione e provare a acquisire screenshot. Dato che l'SDK ha criteri, questo deve essere bloccato in modo coerente su qualsiasi schermata.
  13. Disconnettere l'account gestito dall'applicazione.
  14. Se possibile, senza accedere, esplorare l'applicazione e provare a acquisire screenshot. Ora che l'account è stato rimosso, questo non deve essere bloccato.

Si tratta di un test minimo per verificare che l'app abbia registrato correttamente l'account, registrato il callback di autenticazione e annullato la registrazione dell'account. Eseguire i test seguenti per convalidare in modo più approfondito il modo in cui altre impostazioni dei criteri di protezione delle app modificano il comportamento dell'applicazione.

Test di protezione dei dati

I test seguenti riguardano impostazioni di protezione dei dati specifiche configurate all'interno dei criteri di protezione delle app. Quando si modificano le impostazioni dei criteri di protezione delle app nell'interfaccia di amministrazione Microsoft Intune, il client non verrà aggiornato immediatamente. Per suggerimenti su come velocizzare i test, vedere Test rapidi con criteri mutevoli .

Per questi test:

  1. Installare l'app.
  2. Installare il Portale aziendale Intune.
  3. Installare un'altra app gestita, destinata agli stessi criteri dell'app, in grado di copiare e incollare dati (ad esempio Microsoft Office).
  4. Installare (o riutilizzare) qualsiasi app non gestita in grado di copiare e incollare dati.
  5. Accedere all'app con l'account gestito di test.
  6. Accedere all'altra app gestita con l'account di test gestito.
Scenario Impostazione dei criteri di protezione delle app Passaggi di test
Screenshot "Acquisizione schermo e Google Assistant" impostato su "Blocca" 1. Passare a tutte le pagine dell'app.
2. Provare a creare uno screenshot in ogni pagina.
3. Verificare che gli screenshot siano bloccati o che l'immagine salvata sia completamente vuota.
Copia testo "Limita taglia, copia e incolla tra altre app" impostata su "App gestite da criteri" 0. Se l'app non ha testo da copiare, ignorare.
1. Passare a tutte le pagine dell'app con testo copiabile.
2. Copiare il testo.
3. Passare all'app non gestita.
4. Tentare di incollare l'app non gestita.
5. Verificare che la incolla sia bloccata.
6. Passare all'altra app gestita.
7. Tentare di incollare l'app gestita.
8. Verificare che la incolla sia consentita.
Incolla testo "Limita taglia, copia e incolla tra altre app" impostata su "App gestite da criteri" 0. Se l'app non ha input di testo da incollare, ignorare.
1. Passare all'app non gestita.
2. Copiare testo dall'app non gestita.
3. Passare a tutte le pagine dell'app con input di testo.
5. Tentare di incollare dall'app non gestita.
5. Verificare che la incolla sia bloccata.
6. Passare all'altra app gestita.
7. Copiare testo dall'altra app gestita.
7. Passare a tutte le pagine dell'app con input di testo.
8. Tentare di incollare dall'altra app gestita.
9. Verificare che la incolla sia consentita.
Stampa "Stampa dei dati dell'organizzazione" impostata su "Blocca" 0. Se l'app non dispone di pagine o documenti stampabili, ignorare.
1. Passare a tutte le pagine dell'app che richiamano la funzione di stampa di Android.
2. Provare a stampare da ogni pagina.
3. Verificare che la stampa sia bloccata.
Browser gestito "Limita il trasferimento di contenuto Web con altre app" impostato su "Microsoft Edge" 0. Se l'app non esegue il rendering dei collegamenti Web, ignorare.
1. Passare a tutte le pagine dell'app che possono visualizzare collegamenti Web o avere input di testo che eseguono il rendering in collegamenti Web selezionabili.
2. Per ogni pagina, selezionare il collegamento Web.
3. Verificare che venga richiesto di installare Microsoft Edge e che il collegamento Web non si apra in un altro browser.
Tastiera con restrizioni "Tastiere approvate" impostata su "Obbligatorio"
"Selezionare le tastiere da approvare" impostato solo su un pacchetto da tastiera che il dispositivo non ha attualmente installato
0. Se l'app non ha input di testo, ignorare.
1. Passare a tutte le pagine dell'app con input di testo.
2. Selezionare l'input di testo per visualizzare la tastiera del dispositivo.
3. Verificare che venga richiesto di installare la tastiera approvata configurata e che la tastiera del dispositivo corrente non si apre.

Test di trasferimento dati

Le impostazioni di trasferimento dei dati sono un sottoinsieme delle funzionalità di protezione dei dati dei criteri di protezione delle app che controllano l'immissione e l'uscita dei dati da app gestite. La maggior parte delle app che supportano l'invio o la ricezione di dati da altre app ha anche la possibilità di salvare e aprire i dati dall'archiviazione locale o cloud. Se l'app dispone di queste funzionalità, sarà necessario implementare un supporto aggiuntivo. Per informazioni dettagliate, vedere Criteri per limitare il trasferimento dei dati tra app e dispositivi o posizioni di archiviazione cloud .

L'app può importare attivamente dati da altre app, ad esempio Microsoft Outlook allegando un file da Microsoft OneDrive. L'app può anche ricevere passivamente dati da altre app, ad esempio Microsoft Office che apre un documento da un allegato di Microsoft Outlook. L'impostazione dei criteri di protezione delle app di ricezione copre entrambi gli scenari.

Per questi test:

  1. Installare l'app.
  2. Installare il Portale aziendale Intune.
  3. Installare un'altra app gestita, destinata agli stessi criteri dell'app, che può inviare e ricevere dati (ad esempio Microsoft Outlook).
  4. Installare (o riutilizzare) qualsiasi app non gestita in grado di inviare e ricevere dati.
  5. Accedere all'app con l'account gestito di test.
  6. Accedere all'altra app gestita con l'account di test gestito.
Scenario Impostazione dei criteri di protezione delle app Passaggi di test
Invio di dati ad altre app "Invia dati dell'organizzazione ad altre app" impostato su "App gestite da criteri" 0. Se l'app non può inviare dati ad altre app, ignorare.
1. Passare alla posizione in cui l'app può inviare dati.
2. Tentare di inviare dati.
3. Verificare di essere limitati all'invio di dati solo ad altre app gestite. Verrà visualizzata una selezione app con solo app gestite.
Importazione di dati da altre app "Ricevere dati da altre app" impostato su "App gestite da criteri" 0. Se l'app non può importare dati da altre app, ignorare.
1. Passare alla posizione in cui l'app può importare dati da altre app.
2. Tentativo di importazione dei dati.
3. Verificare di essere limitati all'importazione di dati solo da altre app gestite. Verrà visualizzata una selezione app con solo app gestite.
Ricezione di dati da un'app non gestita "Ricevere dati da altre app" impostato su "App gestite da criteri" 0. Se l'app non è in grado di ricevere dati da altre app, ignorare.
1. Passare all'app non gestita.
2. Passare alla posizione in cui può inviare i dati.
3. Provare a inviare dati dall'app non gestita all'app.
4. Verificare che l'app non sia in grado di ricevere dati dall'app non gestita.
Ricezione di dati da un'app gestita "Ricevere dati da altre app" impostato su "App gestite da criteri" 0. Se l'app non è in grado di ricevere dati da altre app, ignorare.
1. Passare all'altra app gestita.
2. Passare alla posizione in cui può inviare i dati.
3. Provare a inviare dati dall'altra app gestita all'app.
4. Verificare che l'app sia in grado di ricevere dati dall'altra app gestita.

Altre impostazioni di protezione dei dati

Le impostazioni di protezione dei dati seguenti non verranno applicate fino a quando l'app non accetta modifiche aggiuntive. Non è necessario testare queste impostazioni in questa fase. Per altri dettagli , vedere Fase 7: Funzionalità di partecipazione alle app .

Scenario Impostazione dei criteri di protezione delle app Deve implementare il supporto se...
Salvataggio di copie di dati Salvare copie dei dati dell'organizzazione L'applicazione può salvare i dati nell'archiviazione locale o cloud.
Apertura dei dati dall'archiviazione Aprire i dati nei documenti dell'organizzazione L'applicazione può aprire i dati dall'archiviazione locale o cloud.
Contenuto delle notifiche gestite Notifiche dei dati dell'organizzazione L'app include i dati utente all'interno delle notifiche.
Backup e ripristino Eseguire il backup dei dati dell'organizzazione nei servizi di backup Android L'app condivide i dati utente con la funzionalità di backup di Android.

Test di avvio condizionale

Le impostazioni di avvio condizionale sono un subset di funzionalità dei criteri di protezione delle app che limitano l'accesso all'app in base a criteri configurabili a livello di dispositivo o specifici dell'app. Queste impostazioni includono entrambe le condizioni (ad esempio "versione minima del sistema operativo") e azioni (ad esempio "blocca l'accesso"). Le azioni di avvio condizionale possono essere:

  • Avviso: l'utente finale visualizzerà una finestra di dialogo di avviso quando il dispositivo o l'app non soddisfa i criteri. Avranno comunque accesso a tutti i dati dell'app.
  • Blocca l'accesso: l'utente finale visualizzerà una finestra di dialogo di avviso quando il dispositivo o l'app non soddisfa i criteri. Non sarà consentito immettere l'app e accedere ai dati dell'app fino a quando non soddisfano i criteri o non rimuoveranno l'account gestito dall'app.
  • Cancella dati: tutti i dati aziendali associati all'account gestito verranno cancellati quando il dispositivo o l'app non soddisfa i criteri. L'utente non avrà la possibilità di soddisfare i criteri prima della rimozione dei dati.

Alcune impostazioni di avvio condizionale possono essere configurate con più valori e azioni. Ad esempio:

  • Versione minima del sistema operativo, valore "10.0", azione impostata su "Avvisa".
  • Versione minima del sistema operativo, valore "9.0", azione impostata su "Blocca accesso"
  • Versione minima del sistema operativo, valore "8.0", azione impostata su "Cancella dati".

Completando i passaggi di integrazione in questa fase, l'app supporta ora tutte le funzionalità di avvio condizionale. Acquisire familiarità con la funzionalità di avvio condizionale modificando gli elementi dei criteri in modo che il dispositivo di test:

  • Passa tutte le impostazioni di avvio condizionale configurate.
  • Non riesce un'impostazione di avvio condizionale configurata impostata sull'azione "Avvisa".
  • Non riesce un'impostazione di avvio condizionale configurata impostata sull'azione "Blocca accesso".
  • Errore di un'impostazione di avvio condizionale configurata impostata sull'azione "Cancella dati".

Risoluzione dei problemi

Risoluzione dei problemi dei test dell'applicazione first policy

Seguendo i passaggi di test dell'applicazione first policy precedenti, è possibile che si verifichino i comportamenti imprevisti seguenti:

Dopo l'accesso con un account gestito, non viene richiesto di installare il Portale aziendale (passaggio 7)

Prima di tutto, visitare l'interfaccia di amministrazione di Intune e verificare che i criteri di protezione delle app siano destinati all'account di test.

In secondo luogo, controllare il codice sorgente per le chiamate a e l'implementazione registerAccountForMAM di MAMServiceAuthenticationCallback. Se il primo non viene chiamato al momento giusto e/o se quest'ultimo non ha fornito correttamente un token valido, non verrà visualizzato il prompt Portale aziendale.

Infine, cercare nei log (o eseguire il debug) il codice dei risultati della registrazione o chiamare getRegisteredAccountStatus in modo esplicito sull'account. Codici come NOT_LICENSED possono indicare problemi di configurazione con l'account di test.

Non è stata visualizzata la schermata Ottieni accesso dopo l'accesso (passaggio 10)

Se il Portale aziendale non è stato installato in precedenza, potrebbe essere necessario riprendere o riavviare completamente l'applicazione per visualizzare la schermata Ottieni accesso e applicare correttamente i criteri. Si tratta di un risultato previsto basato sul modo in cui le app integrate nell'SDK sfruttano il codice all'interno dell'app Portale aziendale.

Se ancora non viene visualizzata la schermata Ottieni accesso, anche dopo il riavvio dell'app e l'accesso, l'SDK potrebbe non riuscire a registrare l'account o a recuperare i criteri per l'account. Controllare l'implementazione del codice sorgente di MAMServiceAuthenticationCallback.

Non è stata visualizzata la schermata per impostare o immettere un PIN dell'app dopo l'accesso (passaggio 11)

Sono presenti altre applicazioni integrate nell'SDK nel dispositivo di test? Il PIN dell'app viene condiviso tra tutte le app gestite e l'SDK dispone di un timer globale per impedire agli utenti finali di richiedere il PIN in ogni avvio o ripresa dell'app gestita.

In caso contrario, visitare l'interfaccia di amministrazione di Intune e verificare che i criteri di protezione delle app siano abilitati per il PIN dell'app e che siano destinati all'account di test.

Come ultima risorsa, il riavvio del dispositivo reimposta il timer del PIN. Se la schermata PIN non viene visualizzata dopo il riavvio del dispositivo, è probabile che non sia configurata correttamente nei criteri.

È stata visualizzata la schermata Ottieni accesso, ma gli screenshot sono ancora consentiti (passaggio 12)

Durante il recupero dei criteri, vengono applicati criteri errati. Prima di tutto, visitare l'interfaccia di amministrazione di Intune e verificare che i criteri di protezione delle app disabilitano gli screenshot e siano destinati all'account di test. In secondo luogo, usare la console di diagnostica (descritta in precedenza) per controllare i criteri estratti per l'app. Se entrambi i criteri confermano che gli screenshot devono essere bloccati, controllare la configurazione del plug-in di compilazione Gradle per assicurarsi che vengano effettuate sostituzioni MAM.

L'app si è arrestata in modo anomalo o si è chiusa dopo la disconnessione (passaggio 13)

Quando si annulla la registrazione di un account registrato in precedenza e sono stati applicati criteri, i dati associati a tale account verranno cancellati dall'SDK. È previsto il termine del processo dell'app.

Gli screenshot sono ancora bloccati anche dopo la disconnessione (passaggio 14)

Controllare il codice sorgente per le chiamate a unregisterAccountForMAM(). Se i criteri vengono ancora applicati dopo la disconnessione, è probabile che l'account non sia stato correttamente annullato e non registrato.

Risoluzione dei problemi dei test di protezione dei dati

Seguendo la procedura test di protezione dei dati precedente, è possibile che si verifichino i comportamenti imprevisti seguenti:

L'app non riceve né applica criteri

Verificare innanzitutto che i criteri di protezione delle app siano destinati a un gruppo contenente l'account di test. Per informazioni dettagliate, vedere Come convalidare la configurazione dei criteri di protezione delle app in Microsoft Intune.

In secondo luogo, controllare le informazioni di diagnostica del client per verificare che l'SDK abbia ricevuto i criteri configurati. In caso contrario, esaminare l'implementazione dell'app di MAMServiceAuthenticationCallback e chiama a registerAccountForMAM. Controllare anche i log o il debug per verificare l'oggetto MAMEnrollmentManager.Result.

L'app può condividere dati in un'app non gestita

Verificare che "Invia dati dell'organizzazione ad altre app" sia impostato su "App gestite da criteri". Controllare l'interfaccia di amministrazione Microsoft Intune per verificare che i criteri siano configurati e assegnati correttamente. Controllare le informazioni di diagnostica del client per verificare che l'SDK abbia ricevuto i criteri configurati.

Successivamente, se i criteri sono configurati e recuperati correttamente, verificare se vengono applicati criteri : l'app non riceve o applica criteri.

L'app non può condividere dati con un'altra app gestita

Verificare le impostazioni dei criteri di protezione delle app destinate sia all'app che all'altra app gestita. È consigliabile avere lo stesso criterio di destinazione per entrambe le app. I criteri destinati all'app devono avere "Invia dati dell'organizzazione ad altre app" impostato su "App gestite da criteri". Controllare i criteri destinati all'altra app; se "Receive data from other apps" è impostato su "None", questo comportamento è previsto.

L'app può ricevere dati da un'app non gestita

Verificare che "Ricevere dati da altre app" sia impostato su "App gestite da criteri". Controllare l'interfaccia di amministrazione Microsoft Intune per verificare che i criteri siano configurati e assegnati correttamente. Controllare le informazioni di diagnostica del client per verificare che l'SDK abbia ricevuto i criteri configurati.

Successivamente, se i criteri sono configurati e recuperati correttamente, verificare se vengono applicati criteri : l'app non riceve o applica criteri.

L'app non può ricevere dati da un'altra app gestita

Verificare le impostazioni dei criteri di protezione delle app destinate sia all'app che all'altra app gestita. È consigliabile avere lo stesso criterio di destinazione per entrambe le app. I criteri destinati all'app devono avere "Ricevi dati da altre app" impostato su "App gestite da criteri". Controllare i criteri destinati all'altra app; se "Send org data to other apps" è impostato su "None", questo comportamento è previsto.

Operazioni successive

Dopo aver completato tutti i criteri di uscita precedenti, l'app è ora integrata correttamente come identità singola e può applicare tutti i criteri di protezione delle app di base. Le sezioni successive Stage 5: Multi-Identity, Stage 6: Configurazione app e Stage 7: App Participation Features possono essere necessarie o meno, a seconda del supporto dei criteri di protezione delle app desiderato per l'app. Se non si è certi che una di queste sezioni si applichi all'app, rivedere le decisioni chiave per l'integrazione dell'SDK.