Dela via


Intune App SDK för Android – MAM-integrering – essentials

Med Microsoft Intune App SDK för Android kan du införliva Intune-appskyddsprinciper (även kallade APP- eller MAM-principer ) i din interna Java/Kotlin Android-app. Ett Intune-hanterat program är ett program som är integrerat med Intune App SDK. Intune-administratörer kan enkelt distribuera appskyddsprinciper till din Intune-hanterade app när Intune aktivt hanterar appen.

Obs!

Den här guiden är uppdelad i flera olika steg. Börja med att granska steg 1: Planera integreringen.

Steg 4: MAM Integration Essentials

Etappmål

  • Aktivera STRIKT MAM-läge.
  • Registrera dig för kritiska meddelanden från SDK.
  • Implementera och registrera ett återanrop för autentisering för att tillhandahålla Microsoft Entra-token från MSAL till SDK.
  • Registrera nya konton för MAM-hantering efter autentisering med MSAL.
  • Avregistrera konton vid utloggning för att ta bort företagsdata.
  • (Rekommenderas) Införliva MAM-loggning i din app.
  • (Rekommenderas) Lär dig hur du använder diagnostikdialogrutan för SDK.

Bakgrund

Nu när du har hämtat Intune App SDK, integrerat i din version och utfört klass- och metodbyten är det dags att göra de viktigaste kodändringarna för att börja tillämpa principinställningar för appskydd för MAM-skyddade konton.

I det här steget får du lära dig hur du ansluter till SDK:ts loggning, anropar en diagnostikdialogruta, aktiverar MAM-strikt läge för att identifiera möjliga integreringsbuggar, registrerar för meddelanden från SDK och viktigast av allt, hur du registrerar ett konto för Intune MAM för att börja ta emot principer.

STRIKT MAM-läge

Strikt MAM-läge kan identifiera potentiella buggar i programmets integrering av Intune App SDK. Dessa integreringsbuggar kan leda till att appskyddsprincipen inte tillämpas korrekt och att företagets data inte skyddas. Därför krävs användning av STRIKT MAM-läge.

STRIKT MAM-läge söker efter avvikelser i programmets användning av MAM-API:er och MAM-begränsade plattforms-API:er. Mam Strict Mode är löst mönstrat efter Androids StrictMode och kör en fördefinierad uppsättning kontroller som genererar körningsfel när de misslyckas. STRIKT MAM-läge är inte avsett att vara aktiverat i produktionsversioner. Använd i stället den i appens interna utveckling, felsökning och/eller dogfood-versioner.

Om du vill aktivera strikt MAM-läge anropar du följande metod tidigt i programinitiering (till exempel Application.onCreate):

MAMStrictMode.enable();

När en kontroll av strikt MAM-läge misslyckas kan du försöka avgöra om det är ett verkligt problem som kan åtgärdas i din app eller en falsk positiv identifiering. Om du tror att det är en falsk positiv identifiering eller om du inte är säker kan du meddela Intune MAM-teamet. Detta gör att vi kan se till att vi håller med om den falska positiva beslutsamheten och att försöka förbättra identifieringen för framtida versioner. Om du vill förhindra falska positiva identifieringar inaktiverar du den misslyckade kontrollen genom att följa anvisningarna nedan.

Hantera överträdelser

När en kontroll misslyckas körs en MAMStrictViolationHandler. Standardhanteraren genererar en Error, som förväntas krascha appen. Detta är för att göra fel så bullriga som möjligt och passar med avsikten att strikt läge inte ska aktiveras i produktionsversioner.

Om din app vill hantera överträdelser på olika sätt kan den tillhandahålla en egen hanterare genom att anropa följande metod där handler implementerar MAMStrictViolationHandler:

MAMStrictMode.global().setHandler(handler);

Ignorera kontroller

Om en kontroll misslyckas i en situation där din app inte gör något fel rapporterar du det som nämnts ovan. Under tiden kan det vara nödvändigt att inaktivera kontrollen som påträffar en falsk positiv identifiering, åtminstone i väntan på en uppdaterad SDK. Kontrollen, som misslyckades, visas i felet som utlöses av standardhanteraren, eller skickas till en anpassad hanterare om den anges.

Även om undertryckningar kan utföras globalt är det bra att tillfälligt inaktivera per tråd på den specifika anropswebbplatsen. I följande exempel visas olika sätt att inaktivera MAMStrictCheck.IDENTITY_NO_SUCH_FILE (aktiveras om ett försök görs att skydda en fil som inte finns).

Per-Thread tillfällig undertryckning

Det här är den föredragna undertryckningsmekanismen.

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 permanent undertryckning

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

Global (processomfattande) undertryckning

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

Registrera dig för meddelanden från SDK

Intune App SDK utfärdar många olika typer av meddelanden för att informera program om tidskänsliga hanteringsåtgärder. Ditt program kan registrera sig för och vidta åtgärder när du tar emot någon av dessa meddelanden.

När en IT-administratör till exempel utfärdar ett selektivt rensningskommando för en enhet skickar Intune-tjänsten ett meddelande till SDK:n, som skickas till ditt program som WIPE_USER_DATA. Programmet kan lyssna efter det här meddelandet och styra vilka data som rensas. eller så kan den förlita sig på SDK:ts standardbeteende för rensning.

Många av meddelandena är valfria. Beroende på vilka SDK-funktioner ditt program använder kan vissa meddelanden krävas. Mer information om hur du registrerar för meddelanden, vilka meddelanden som SDK levererar och hur du hanterar specifika aviseringstyper finns i Registrera för meddelanden från SDK i steg 7: Funktioner för appandel .

Registrera för appskyddsprincip

När administratörer skapar appskyddsprinciper riktar de dessa principer mot specifika konton i organisationen. På klienten måste SDK:et veta vilket konto som använder programmet så att det kan hämta kontots princip och tillämpa inställningarna på rätt sätt. Din app ansvarar för att tillhandahålla SDK med den här kontoinformationen. Den här processen kallas för registrering.

När din app lägger till ett nytt konto måste den registrera kontot med SDK:n, även om andra konton redan är registrerade. Din app kan registrera flera konton. För närvarande kan dock endast ett konto registreras eller ha en appskyddsprincip tillämpad. På Android är den här begränsningen för ett enda hanterat konto enhetsomfattande.

Registrering jämfört med registrering

Registrering är den process där din app informerar SDK:n om att ett nytt konto används. SDK:t innehåller funktioner som appen måste anropa för att registrera och avregistrera konton.

Registrering är den process där SDK registrerar det registrerade kontot med Intune-tjänsten så att det kan tillämpa kontots princip. Appen behöver inte anropa några funktioner för registrering. SDK:et hanterar registreringen fullständigt när ett konto har registrerats.

Om ett konto redan har registrerats för ditt program, när det registrerar ett annat konto, även om det kontot är mål för appskyddsprinciper, registreras inte det andra kontot och principen tillämpas inte.

Obs!

Termen "registrering" kan också referera till enhetsomfattande MDM-registrering Läs mer i bilagan vid MDM- och MAM-registrering.

Implementera registrering

Försiktighet

Om din app inte integrerar MSAL (rekommenderas starkt) läser du Standardregistrering i bilagan i stället för att fortsätta det här avsnittet.

Din app måste göra tre kodändringar för att registrera ett konto:

  1. Appen måste implementera och registrera en instans av gränssnittet MAMServiceAuthenticationCallback eller MAMServiceAuthenticationCallbackExtended . Motringningsinstansen onCreate() måste registreras i metoden (eller onMAMCreate()) i underklassen Program.

  2. När ett konto skapas och användaren loggar in med MSAL måste appen anropa registerAccountForMAM.

  3. När ett konto tas bort bör appen anropa unregisterAccountForMAM för att ta bort kontot från Intune-hanteringen.

    Försiktighet

    Anropet kan initiera en rensning för att helt ta bort företagsdata för kontot.

Alla nödvändiga API:er för autentisering och registrering finns i MAMEnrollmentManager-gränssnittet . En referens till MAMEnrollmentManager kan erhållas på följande sätt:

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

// make use of mgr

Den returnerade instansen MAMEnrollmentManager är garanterat inte null. API-metoderna delas in i två kategorier: autentisering och kontoregistrering.

MAMEnrollmentManager och autentisering

SDK kommunicerar ofta med Intune-tjänsten: för registrering av registrerade konton, för att hämta uppdateringar av inställningarna för appskyddsprinciper och för att få väntande administratörsåtgärder, till exempel selektiv rensning av skyddade data i din app. För att kunna kommunicera med Intune-tjänsten kräver SDK nya åtkomsttoken från appar som har integrerad MSAL.

Om SDK:n inte kan hämta en ny token kan den inte kommunicera med Intune-tjänsten, vilket kan fördröja hämtning och tillämpning av nya principinställningar eller administratörsåtgärder. Det är viktigt att din app slutför de här stegen för att säkerställa sömlös tillämpning av principen.

I steg 2 integrerade du MSAL i ditt program för autentisering och hämtning av åtkomsttoken. Här implementerar du ett återanrop för autentisering så att SDK:et kan begära nödvändiga token.

MAMEnrollmentManager har följande autentiseringsmetoder:

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);

Obs!

Parametern aadId i dessa metoder refererar till Microsoft Entra-användar-ID, tidigare kallat AAD-ID och även kallat OID.

  1. Appen måste implementera MAMServiceAuthenticationCallback-gränssnittet eller MAMServiceAuthenticationCallbackExtended-gränssnittet så att SDK:n kan begära en Microsoft Entra-token för det angivna kontot och resurs-ID:t. Motringningsinstansen MAMEnrollmentManager måste tillhandahållas till genom att anropa dess registerAuthenticationCallback-metod . En token kan behövas tidigt i applivscykeln för registreringsförsök eller incheckningar av uppdatering av appskyddsprinciper, så återanropet måste registreras i metoden (eller onMAMCreate()) i onCreate() appens Application underklass.

  2. Metoden acquireToken bör hämta åtkomsttoken för det begärda resurs-ID:t för det angivna kontot. Om den inte kan hämta den begärda token ska den returnera null.

    Tips

    Se till att din app använder parametrarna resourceIdaadId och som skickas till acquireToken() så att rätt token hämtas. Parametern är endast avsedd för informationsanvändning. Den upn bör inte användas för att identifiera ett konto utan att även överväga aadId. resourceId Bör användas för att generera rätt omfång och aadId bör användas för att skicka vidare rätt konto. Om token returneras för fel konto och/eller fel resurs kan de orsaka fördröjningar eller fel vid registrering av appen och hämtning av principer. Om din app behöver Microsoft Entra-utfärdaren för att hämta token korrekt implementerar du MAMServiceAuthenticationCallbackExtended gränssnittet.

    class MAMAuthCallback implements MAMServiceAuthenticationCallbackExtended {
        public String acquireToken(String upn, String aadId,
                    String tenantId, String authority, String resourceId) {
            final String[] scopes = {resourceId + "/.default"};
    
            final IAccount account = getAccount(aadId);
            if (account == null) {
                // Log error or warning here about: "no account found for " + aadId
                return null;
            }
    
            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. Om appen inte kan ange en token när SDK anropar acquireToken() , till exempel om tyst autentisering misslyckas och det är en obekväm tid att visa ett användargränssnitt, kan appen tillhandahålla en token vid ett senare tillfälle genom att anropa metoden updateToken . Samma UPN, Microsoft Entra-ID och resurs-ID som begärdes av det tidigare anropet måste acquireToken() skickas till updateToken(), tillsammans med den token som slutligen hämtades. Parametern upn är endast i informationssyfte och ignoreras vanligtvis av MAM SDK. Appen bör anropa den här metoden så snart som möjligt efter att ha returnerat null från det angivna återanropet.

    Varning

    Anropa updateToken() inte inifrån implementeringen av acquireToken(). updateToken() ska användas om acquireToken() det inte går att hämta en token.

    Obs!

    SDK anropar acquireToken() regelbundet för att hämta token, så anrop updateToken() är inte absolut nödvändigt. Det rekommenderas dock starkt eftersom det kan hjälpa registreringar och incheckningar av appskyddsprinciper att slutföras i tid.

Anteckningar om autentiseringsimplementering

  • Appar uppmuntras att hämta Microsoft Entra-token innan de anropar registerAccountForMAM. När du har registrerat ett konto får appar ett återanrop till den registrerade MAMServiceAuthenticationCallbackacquireToken() metoden i en annan tråd. Om du anger en giltig token i återanropet kan registreringen fortsätta. Appen hämtar registreringsresultatet via meddelande.

  • Om appen inte returnerar en giltig Microsoft Entra-token blir AUTHORIZATION_NEEDEDdet slutliga resultatet från registreringsförsöket . Om appen tar emot det här resultatet via meddelande rekommenderar vi att du påskyndar registreringsprocessen genom att hämta token för kontot och resursen som tidigare begärdes från acquireToken och anropa metoden updateToken för att initiera registreringsprocessen igen.

  • Appens registrerade MAMServiceAuthenticationCallback anropas också för att hämta en token för periodiska incheckningar av appskyddsprinciper. Om appen inte kan ange en token när den begärs får den inget meddelande, men den bör försöka hämta en token och anropa updateToken() vid nästa lämpliga tidpunkt för att påskynda incheckningsprocessen. Om en token inte anges kan återanropet fortfarande anropas vid nästa incheckningsförsök.

  • Stöd för nationella moln kräver att du tillhandahåller auktoriteten.

  • Om MAMServiceAuthenticationCallbackExtended gränssnittet implementeras behöver inte den ärvda acquireToken() metoden från MAMServiceAuthenticationCallback implementeras eftersom MAMServiceAuthenticationCallbackExtended gränssnittet tillhandahåller en standardimplementering.

MAMEnrollmentManager och registrering

När appen lägger till ett konto måste den registrera kontot med SDK:et. När appen tar bort ett konto bör den på samma sätt avregistrera kontot för att indikera att appen inte längre ska tillämpa principen för det kontot. Om kontot har registrerats i MAM-tjänsten avregistreras kontot och appen rensas.

MAMEnrollmentManager har följande metoder för kontoregistrering:

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. Om du vill registrera ett konto för hantering bör appen anropa registerAccountForMAM(). Ett konto identifieras av både dess UPN och dess Microsoft Entra-användar-ID. Klientorganisations-ID krävs också för att associera registreringsdata med kontots Microsoft Entra-klientorganisation. Kontots utfärdare kan också tillhandahållas för att tillåta registrering mot specifika nationella moln. Mer information finns i Registrering av nationella moln. SDK:t kan försöka registrera appen för det angivna kontot i MAM-tjänsten. Om registreringen misslyckas försöker den regelbundet registrera igen tills registreringen lyckas eller kontot avregistreras. Återförsöksperioden är vanligtvis 12–24 timmar. SDK:et ger status för registreringsförsök asynkront via meddelanden.

  2. Den bästa tiden att anropa registerAccountForMAM är när användaren har loggat in i appen och har autentiserats med hjälp av MSAL. Kontots Microsoft Entra-användar-ID, klientorganisations-ID och utfärdare returneras från MSAL-autentiseringsanropet som en del av det IAccount relaterade till IAuthenticationResult.

    • Kontot kommer från IAuthenticationResult.getAccount() metoden och innehåller relevant kontoinformation.
    • AAD-ID :t (även kallat Microsoft Entra-ID eller OID) kommer från IAccount.getId() metoden .
    • Klientorganisations-ID:t kommer från IAccount.getTenantId() metoden .
    • Auktoriteten IAccount.getAuthority() kommer från metoden .
  3. Om du vill avregistrera ett konto från Intune-hanteringen ska appen anropa unregisterAccountForMAM(). Om kontot har registrerats och hanteras avregistrerar SDK kontot och rensar dess data. Periodiska registreringsförsök för kontot stoppas. SDK:et tillhandahåller status för avregistreringsbegäranden asynkront via meddelande.

Anteckningar om registreringsimplementering

  • Registreringsmetoderna är idempotent. Till exempel registrerar registerAccountForMAM bara ett konto och försöker registrera appen om kontot inte redan är registrerat och avregistreraAccountForMAM avregistrerar bara ett konto om det är registrerat för närvarande. Efterföljande anrop är no-ops, så det är ingen skada att anropa dessa metoder mer än en gång.

  • Det finns ingen garanti för att varje register-/avregistreringsanrop har ett motsvarande resultatmeddelande. Om registerAccountForMAM() till exempel anropas för ett konto som redan är registrerat kanske meddelandet inte skickas igen för den identiteten. Alternativt kan SDK skicka meddelanden även när appen inte anropade dessa metoder, eftersom SDK:t med jämna mellanrum kan försöka registrera i bakgrunden, och avregistreringar kan utlösas av rensningsbegäranden som tas emot från Intune-tjänsten.

  • Registreringsmetoderna kan anropas för valfritt antal olika konton, men för närvarande kan bara ett konto registreras. Om flera konton som är licensierade för Intune och som är mål för appskyddsprincipen registreras på eller nästan samtidigt finns det ingen garanti för vilken som vinner loppet.

  • Du kan fråga MAMEnrollmentManager för att se om ett visst konto har registrerats och hämta dess aktuella status med metoden getRegisteredAccountStatus . Om det angivna kontot inte är registrerat returnerar den här metoden null. Om kontot är registrerat returnerar den här metoden kontots status som en av medlemmarna i MAMEnrollmentManager.Result-uppräkningen .

Registrering av nationellt moln

Azure stöder flera fysiskt isolerade moln, så kallade nationella eller nationella moln. Om ditt program är molnbaserat måstedet ange parametern authority till registerAccountForMAM().

MSAL-vägledning

För MSAL anger du multiple_clouds_supported till true i MSAL-konfigurationsfilen.

{
  "multiple_clouds_supported": true,
}

Resultat- och statuskoder för registrering

När ett konto först registreras börjar det i PENDING tillståndet, vilket indikerar att det första mam-tjänstregistreringsförsöket är ofullständigt. När registreringsförsöket har slutförts skickas ett meddelande med någon av resultatkoderna i tabellen nedan. Dessutom returnerar metoden getRegisteredAccountStatus kontots status så att appen alltid kan avgöra om det kontot har tillämpat appskyddsprinciper. Om registreringsförsöket misslyckas kan kontots status ändras med tiden när SDK:t försöker registrera igen i bakgrunden.

Resultatkod Förklaring
AUTHORIZATION_NEEDED Det här resultatet anger att en token inte tillhandahölls av appens registrerade MAMServiceAuthenticationCallback-instans , eller att den angivna token var ogiltig. Appen bör hämta en giltig token och anropa updateToken om möjligt.
NOT_LICENSED Kontot är inte licensierat för Intune eller så misslyckades försöket att kontakta Intune MAM-tjänsten. Appen bör fortsätta i ett ohanterat (normalt) tillstånd och användaren bör inte blockeras. Registreringar görs regelbundet om kontot blir licensierat i framtiden.
ENROLLMENT_SUCCEEDED Registreringsförsöket lyckades eller så har kontot redan registrerats. Vid en lyckad registrering skickas ett meddelande om principuppdatering före det här meddelandet. Åtkomst till företagsdata bör tillåtas.
ENROLLMENT_FAILED Registreringsförsöket misslyckades. Mer information finns i enhetsloggarna. Appen bör inte tillåta åtkomst till företagsdata i det här tillståndet, eftersom det tidigare fastställdes att kontot är licensierat för Intune. Alla appar bör se till att företagets dataåtkomst är obehörig tills ENROLLMENT_SUCCEEDED den hämtas av din app.
WRONG_USER Endast ett konto per enhet kan registrera en app med MAM-tjänsten. Det här resultatet anger att kontot för vilket det här resultatet levererades (det andra kontot) är mål för MAM-principen, men ett annat konto har redan registrerats. Eftersom MAM-principen inte kan tillämpas för det andra kontot får din app inte tillåta åtkomst till det här kontots data (eventuellt genom att ta bort kontot från din app) såvida inte/tills registreringen för det här kontot lyckas vid ett senare tillfälle. Samtidigt som det här WRONG_USER resultatet levereras uppmanar MAM med alternativet att ta bort det befintliga kontot. Om den mänskliga användaren svarar jakande kommer det verkligen att vara möjligt att registrera det andra kontot en kort tid senare. Så länge det andra kontot förblir registrerat försöker MAM registrera igen med jämna mellanrum.
UNENROLLMENT_SUCCEEDED Avregistreringen lyckades.
UNENROLLMENT_FAILED Avregistreringsbegäran misslyckades. Mer information finns i enhetsloggarna. I allmänhet sker detta inte så länge appen skickar ett giltigt (varken null eller tomt) UPN. Det finns ingen direkt och tillförlitlig reparation som appen kan vidta. Om det här värdet tas emot när du avregistrerar ett giltigt UPN rapporterar du som en bugg till Intune MAM-teamet.
PENDING Det första registreringsförsöket för kontot pågår. Appen kan blockera åtkomst till företagsdata tills registreringsresultatet är känt, men det krävs inte.
COMPANY_PORTAL_REQUIRED Kontot är licensierat för Intune, men appen kan inte registreras förrän företagsportalappen har installerats på enheten. Intune App SDK försöker blockera åtkomsten till appen för det angivna kontot och instruera dem att installera företagsportalappen. När du skickar det här meddelandet till appen visar Intune App SDK ett icke-blockerande användargränssnitt ovanpå den aktuella aktiviteten om aktiviteten för närvarande är synlig för användaren eller nästa gång onResume anropas. Om användaren avbryter det här icke-blockerande användargränssnittet visar Intune App SDK ett blockerande användargränssnitt nästa gång onCreate anropas för en aktivitet och den aktuella identiteten hanteras (se nedan för information om felsökning).

Loggning bör initieras tidigt för att få ut mesta möjliga av loggade data. Application.onMAMCreate() är vanligtvis den bästa platsen för att initiera loggning.

Om du vill ta emot MAM-loggar i din app skapar du en Java-hanterare och lägger till den i MAMLogHandlerWrapper. Detta anropar publish() programhanteraren för varje loggmeddelande.

/**
 * 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);
}

Obs!

PII står för "personligt identifierbar information" och kan innehålla data som användarnamn och UPN. Du uppmanas starkt att undanta sådan personlig information i dina egna produktionsloggar. Mer information finns i Microsofts sekretesspolicy .

Intune-företagsportalappen har flera alternativ för att samla in diagnostikinformation. Företagsportalen innehåller användargränssnitt som:

  • Gör det möjligt för slutanvändare att samla in företagsportalloggar.
  • Visar metadata för enheter och konton.
  • Innehåller information per app om den aktuella MAM-principen.

Intune Diagnostics UI Intune App Info

En detaljerad förklaring av de data som ingår i företagsportalloggarna och i diagnostikgränssnittet finns i Förstå företagsportalloggar i tillägget.

Tips

Om du testar med ett konto som ska ha MAM-principen tillämpad, men diagnostiken inte visar någon princip för appens paketnamn, kan du läsa avsnittet Felsökning nedan.

Appar kan starta det här diagnostikgränssnittet genom att MAMPolicyManager.showDiagnostics(context)anropa . Slutanvändare kan också starta företagsportalens diagnostikkonsol via Microsoft Edge genom att ange about:intunehelp i adressfältet. Det här är en valfri funktion som kan vara till hjälp vid felsökning.

Den här diagnostikinformationen är endast tillgänglig när företagsportalen är installerad på enheten. En varningsdialogruta visas när den showDiagnostics anropas utan att företagsportalen är installerad.

Avslutsvillkor

Nu i integreringen kan appen ta emot och tillämpa appskyddsprincipen. Kör följande tester för att verifiera integreringen.

First Policy Application Test

Kör följande test först för att bekanta dig med den fullständiga slutanvändarupplevelsen för principprogrammet i din app:

  1. Skapa en Android-appskyddsprincip i administrationscentret för Microsoft Intune (mer information finns i Skapa en testprincip för Android-appskydd i steg 1). För det här testet konfigurerar du principen:
    • Under Dataskydd anger du "Skärmdump och Google Assistant" till "Blockera".
    • Lämna standardinställningarna under Åtkomstkrav. Särskilt bör "PIN-kod för åtkomst" vara "Kräv".
  2. Se till att appskyddsprincipen är riktad mot ditt program. Du behöver förmodligen lägga till paketnamnet manuellt i guiden för att skapa principer.
  3. Tilldela appskyddsprincipen till en användargrupp som innehåller ditt testkonto.
  4. På en Android-testenhet avinstallerar du andra SDK-integrerade appar, till exempel Microsoft Outlook, Teams, OneDrive och Office. Avinstallera även Intune-företagsportalappen och Microsoft Authenticator-appen.
    • Tips

      Genom att avinstallera andra SDK-integrerade appar kan du se till att du exklusivt testar integreringen av din egen app.

  5. Installera programmet.
  6. Logga in på ditt program med ditt testkonto som är mål för appskyddsprincipen.
  7. Bekräfta att du uppmanas att installera Intune-företagsportalen från Google Play.
    • Obs!

      Om testenheten inte har Google Play Store-appen bekräftar du att du uppmanas att installera Intune-företagsportalen från en annan appbutik eller en Microsoft-webbplats.

  8. Installera företagsportalen. Du behöver inte starta företagsportalen eller logga in på företagsportalen.
  9. Gå tillbaka till din app och logga in igen om det behövs.
  10. Bekräfta att du uppmanas att använda skärmen Hämta åtkomst. Detta anger att SDK:t har hämtat principen för det här kontot.
  11. Du bör uppmanas att ange en PIN-kod för appen. Skapa en PIN-kod.
  12. Navigera runt i programmet och försök att ta skärmbilder. Med tanke på att SDK:et har en princip bör detta konsekvent blockeras på valfri skärm.
  13. Logga ut det hanterade kontot från ditt program.
  14. Om det är möjligt utan att logga in navigerar du runt i programmet och försöker ta skärmbilder. Nu när kontot har tagits bort bör detta inte blockeras.

Det här är ett minimalt test för att bekräfta att din app har registrerat kontot korrekt, registrerat återanropet för autentisering och avregistrerat kontot. Kör följande tester för att mer noggrant verifiera hur andra inställningar för appskyddsprinciper ändrar programmets beteende.

Dataskyddstester

Följande tester omfattar specifika dataskyddsinställningar som konfigurerats i appskyddsprincipen. När du ändrar inställningarna för appskyddsprinciper i administrationscentret för Microsoft Intune uppdateras inte klienten omedelbart. Se Snabbt testa med ändringsprincip för tips om hur du påskyndar testningen.

För dessa tester:

  1. Installera din app.
  2. Installera Intune-företagsportalen.
  3. Installera en annan hanterad app, riktad med samma princip som din app, som kan kopiera och klistra in data (t.ex. Microsoft Office).
  4. Installera (eller återanvända) alla ohanterade appar som kan kopiera och klistra in data.
  5. Logga in på din app med det testhanterade kontot.
  6. Logga in på den andra hanterade appen med det hanterade testkontot.
Scenario Principinställning för appskydd Teststeg
Skärmbild "Skärmdump och Google Assistant" inställd på "Blockera" 1. Navigera till alla sidor i din app.
2. Försök att ta en skärmbild på varje sida.
3. Bekräfta att skärmbilderna är blockerade eller att bilden som sparats är helt tom.
Kopiera text "Begränsa klipp ut, kopiera och klistra in mellan andra appar" inställt på "Principhanterade appar" 0. Om din app inte har någon text att kopiera hoppar du över.
1. Navigera till alla sidor i din app som har kopierbar text.
2. Kopiera text.
3. Växla till den ohanterade appen.
4. Försök att klistra in den ohanterade appen.
5. Bekräfta att inklistring är blockerad.
6. Navigera till den andra hanterade appen.
7. Försök att klistra in den hanterade appen.
8. Bekräfta att inklistring tillåts.
Klistra in text "Begränsa klipp ut, kopiera och klistra in mellan andra appar" inställt på "Principhanterade appar" 0. Om din app inte har några textindata att klistra in hoppar du över.
1. Växla till den ohanterade appen.
2. Kopiera text från den ohanterade appen.
3. Navigera till alla sidor i din app som har textindata.
5. Försök att klistra in från den ohanterade appen.
5. Bekräfta att inklistring är blockerad.
6. Växla till den andra hanterade appen.
7. Kopiera text från den andra hanterade appen.
7. Navigera till alla sidor i din app som har textindata.
8. Försök att klistra in från den andra hanterade appen.
9. Bekräfta att inklistring tillåts.
Utskrift "Skriva ut organisationsdata" inställt på "Blockera" 0. Om din app inte har några sidor eller dokument som kan skrivas ut kan du hoppa över.
1. Navigera till alla sidor i appen som anropar Androids utskriftsfunktion.
2. Försök att skriva ut från varje sida.
3. Bekräfta att utskriften är blockerad.
Hanterad webbläsare "Begränsa överföring av webbinnehåll med andra appar" inställd på "Microsoft Edge" 0. Om din app inte renderar webblänkar hoppar du över.
1. Navigera till alla sidor i din app som kan visa webblänkar eller ha textinmatning som återges i klickbara webblänkar.
2. Välj webblänken för varje sida.
3. Bekräfta att du uppmanas att installera Microsoft Edge och att webblänken inte öppnas i en annan webbläsare.
Begränsat tangentbord "Godkända tangentbord" inställt på "Obligatoriskt"
"Välj tangentbord som ska godkännas" är inställt på ett tangentbordspaket som enheten för närvarande inte har installerat
0. Om din app inte har några textindata kan du hoppa över.
1. Navigera till alla sidor i din app som har textindata.
2. Välj textinmatningen för att öppna enhetens tangentbord.
3. Bekräfta att du uppmanas att installera det konfigurerade godkända tangentbordet och att det aktuella enhetstangentbordet inte öppnas.

Dataöverföringstester

Dataöverföringsinställningar är en delmängd av appskyddsprincipens dataskyddsfunktioner som styr data som anger och avslutar hanterade appar. De flesta appar som har stöd för att skicka data till eller ta emot data från andra appar har också möjlighet att spara data till och öppna data från lokal lagring eller molnlagring. Om din app har dessa funktioner måste du implementera ytterligare support. Mer information finns i Princip för att begränsa dataöverföring mellan appar och enheter eller molnlagringsplatser .

Din app kan aktivt importera data från andra appar, till exempel Microsoft Outlook som kopplar en fil från Microsoft OneDrive. Din app kan också passivt ta emot data från andra appar, som att Microsoft Office öppnar ett dokument från en Microsoft Outlook-bifogad fil. Principinställningen "ta emot data från andra appar" omfattar båda scenarierna.

För dessa tester:

  1. Installera din app.
  2. Installera Intune-företagsportalen.
  3. Installera en annan hanterad app, riktad med samma princip som din app, som kan skicka och ta emot data (till exempel Microsoft Outlook).
  4. Installera (eller återanvända) alla ohanterade appar som kan skicka och ta emot data.
  5. Logga in på din app med det testhanterade kontot.
  6. Logga in på den andra hanterade appen med det hanterade testkontot.
Scenario Principinställning för appskydd Teststeg
Skicka data till andra appar "Skicka organisationsdata till andra appar" inställt på "Principhanterade appar" 0. Om din app inte kan skicka data till andra appar hoppar du över.
1. Navigera till platsen där din app kan skicka data.
2. Försök att skicka data.
3. Bekräfta att du är begränsad till att endast skicka data till andra hanterade appar. Du bör se en appväljare med endast hanterade appar.
Importera data från andra appar "Ta emot data från andra appar" inställd på "Principhanterade appar" 0. Om din app inte kan importera data från andra appar hoppar du över.
1. Navigera till den plats där appen kan importera data från andra appar.
2. Försök att importera data.
3. Bekräfta att du är begränsad till att endast importera data från andra hanterade appar. Du bör se en appväljare med endast hanterade appar.
Ta emot data från ohanterad app "Ta emot data från andra appar" inställd på "Principhanterade appar" 0. Om din app inte kan ta emot data från andra appar hoppar du över.
1. Växla till den ohanterade appen.
2. Navigera till platsen där den kan skicka data.
3. Försök att skicka data från den ohanterade appen till din app.
4. Bekräfta att din app inte kan ta emot data från den ohanterade appen.
Ta emot data från hanterad app "Ta emot data från andra appar" inställd på "Principhanterade appar" 0. Om din app inte kan ta emot data från andra appar hoppar du över.
1. Växla till den andra hanterade appen.
2. Navigera till platsen där den kan skicka data.
3. Försök att skicka data från den andra hanterade appen till din app.
4. Bekräfta att din app kan ta emot data från den andra hanterade appen.

Andra inställningar för dataskydd

Följande dataskyddsinställningar tillämpas inte förrän appen har ändrats ytterligare. Du behöver inte testa de här inställningarna i det här skedet. Mer information finns i Steg 7: Funktioner för app med deltagande .

Scenario Principinställning för appskydd Måste implementera stöd om...
Spara kopior av data Spara kopior av organisationsdata Ditt program kan spara data till lokal lagring eller molnlagring.
Öppna data från lagring Öppna data i organisationsdokument Ditt program kan öppna data från lokal lagring eller molnlagring.
Hanterat meddelandeinnehåll Meddelanden om organisationsdata Din app innehåller användardata i meddelanden.
Säkerhetskopiera och återställa Säkerhetskopiera organisationsdata till Android Backup-tjänster Din app delar användardata med Androids säkerhetskopieringsfunktion.

Villkorsstyrda starttester

Inställningar för villkorlig start är en delmängd av appskyddsprincipens funktioner som begränsar åtkomsten till din app baserat på konfigurerbara enhetsomfattande eller appspecifika kriterier. De här inställningarna omfattar både villkor (till exempel "lägsta operativsystemversion") och åtgärder (till exempel "blockera åtkomst"). Villkorsstyrda startåtgärder kan vara antingen:

  • Varna: slutanvändaren ser en varningsdialogruta när deras enhet eller app inte uppfyller kriterierna. De har fortfarande åtkomst till alla appdata.
  • Blockera åtkomst: Slutanvändaren ser en varningsdialogruta när deras enhet eller app inte uppfyller kriterierna. De kommer inte att kunna ange appen och komma åt appdata förrän de antingen uppfyller kriterierna eller tar bort det hanterade kontot från appen.
  • Rensa data: alla företagsdata som är associerade med det hanterade kontot rensas när enheten eller appen inte uppfyller kriterierna. Användaren har inte möjlighet att uppfylla kriterierna innan data tas bort.

Vissa inställningar för villkorlig start kan konfigureras med flera värden och åtgärder. Till exempel:

  • Lägsta operativsystemversion, värdet "10.0", åtgärd inställd på "Varna".
  • Lägsta operativsystemversion, värdet "9.0", åtgärd inställd på "Blockera åtkomst"
  • Lägsta operativsystemversion, värdet "8.0", åtgärd inställd på "Rensa data".

Genom att slutföra integreringsstegen i det här steget har appen nu stöd för alla funktioner för villkorlig start. Bekanta dig med funktionen för villkorlig start genom att ändra principobjekt så att testenheten:

  • Skickar alla konfigurerade inställningar för villkorlig start.
  • Misslyckas med en konfigurerad inställning för villkorlig start inställd på åtgärden "Varna".
  • Misslyckas med en konfigurerad inställning för villkorlig start inställd på åtgärden "Blockera åtkomst".
  • Misslyckas med en konfigurerad inställning för villkorlig start inställd på åtgärden "Rensa data".

Felsökning

First Policy Application Test Troubleshooting

Om du följer stegen för det första principprogramtestet ovan kan du stöta på följande oväntade beteenden:

När jag har loggat in med ett hanterat konto uppmanas jag inte att installera företagsportalen (steg 7)

Gå först till Administrationscenter för Intune och kontrollera att appskyddsprincipen är riktad mot ditt testkonto.

Dubbelkolla sedan källkoden för anrop till registerAccountForMAM och implementering av MAMServiceAuthenticationCallback. Om den tidigare inte anropas vid rätt tidpunkt och/eller om den senare inte har angett en giltig token korrekt visas inte uppmaningen till företagsportalen.

Slutligen tittar du antingen i loggarna (eller felsöker) efter registreringsresultatkoden eller anropar getRegisteredAccountStatus uttryckligen kontot. Koder som NOT_LICENSED kan indikera konfigurationsproblem med testkontot.

Jag såg inte skärmen Hämta åtkomst efter inloggning (steg 10)

Om företagsportalen inte tidigare har installerats kan du behöva återuppta eller starta om programmet helt för att se skärmen Hämta åtkomst och tillämpa principen korrekt. Det här är ett förväntat resultat baserat på hur SDK-integrerade appar utnyttjar kod i företagsportalappen.

Om du fortfarande inte ser skärmen Hämta åtkomst, även efter att du har startat om appen och loggat in igen, kan SDK:t misslyckas med att antingen registrera kontot eller hämta principen för kontot. Dubbelkolla källkodens implementering av MAMServiceAuthenticationCallback.

Jag såg inte skärmen för att ange eller ange en PIN-kod för appen efter inloggning (steg 11)

Finns det andra SDK-integrerade program på testenheten? Appens PIN-kod delas mellan alla hanterade appar och SDK:t har en global timer för att förhindra att slutanvändare uppmanas att ange PIN-koden för varje start eller återupptagning av hanterade appar.

Annars går du till Administrationscenter för Intune och dubbelkollar att appskyddsprincipen har appens PIN-kod aktiverad och är riktad mot ditt testkonto.

Som en sista utväg återställer du PIN-timern genom att starta om enheten. Om PIN-skärmen inte visas när du har startat om enheten är den förmodligen inte korrekt konfigurerad i principen.

Jag såg skärmen Hämta åtkomst, men skärmbilder tillåts fortfarande (steg 12)

När principen hämtas tillämpas fel princip. Gå först till Administrationscenter för Intune och kontrollera att appskyddsprincipen inaktiverar skärmbilder och är riktad mot ditt testkonto. För det andra använder du diagnostikkonsolen (beskrivs ovan) för att kontrollera principen som har hämtats för din app. Om båda principerna bekräftar att skärmbilder ska blockeras kontrollerar du konfigurationen av plugin-programmet för Gradle-versionen för att se till att MAM-ersättningar görs.

Min app verkade krascha eller stängas efter utloggning (steg 13)

När du avregistrerar ett konto som tidigare har registrerats och har tillämpat principen rensas data som är associerade med det kontot av SDK:et. Det förväntas att appprocessen avslutas.

Skärmbilder blockeras fortfarande även efter att jag loggat ut (steg 14)

Dubbelkolla källkoden för anrop till unregisterAccountForMAM(). Om principen fortfarande tillämpas efter utloggning är det troligt att kontot inte har avregistrerats och avregistrerats korrekt.

Felsökning av dataskyddstest

Om du följer stegen för dataskyddstester ovan kan du stöta på följande oväntade beteenden:

Min app tar inte emot eller tillämpar inga principer

Bekräfta först att appskyddsprincipen är riktad mot en grupp som innehåller ditt testkonto. Mer information finns i Verifiera konfigurationen av appskyddsprinciper i Microsoft Intune .

För det andra kontrollerar du klientens diagnostikinformation för att bekräfta att SDK har tagit emot den konfigurerade principen. Om den inte har gjort det kontrollerar du appens implementering av MAMServiceAuthenticationCallback och anropar till registerAccountForMAM. Kontrollera även loggar eller felsökning för att verifiera MAMEnrollmentManager.Result.

Min app kan dela data till en ohanterad app

Bekräfta att "Skicka organisationsdata till andra appar" är inställt på "Principhanterade appar". Kontrollera administrationscentret för Microsoft Intune för att bekräfta att principen är korrekt konfigurerad och riktad. Kontrollera klientens diagnostikinformation för att bekräfta att SDK har tagit emot den konfigurerade principen.

Om principen sedan har konfigurerats och hämtats korrekt kontrollerar du om några principer tillämpas: [Min app tar inte emot eller tillämpar inga principer].

Min app kan inte dela data med en annan hanterad app

Bekräfta de inställningar för appskyddsprinciper som är riktade till både din app och den andra hanterade appen. Vi rekommenderar att du har samma principmål för båda apparna. Principen för din app ska ha "Skicka organisationsdata till andra appar" inställd på "Principhanterade appar". Kontrollera principen för den andra appen. Om "Ta emot data från andra appar" är inställt på "Ingen" förväntas det här beteendet.

Min app kan ta emot data från en ohanterad app

Bekräfta att "Ta emot data från andra appar" är inställt på "Principhanterade appar". Kontrollera administrationscentret för Microsoft Intune för att bekräfta att principen är korrekt konfigurerad och riktad. Kontrollera klientens diagnostikinformation för att bekräfta att SDK har tagit emot den konfigurerade principen.

Om principen sedan har konfigurerats och hämtats korrekt kontrollerar du om några principer tillämpas: [Min app tar inte emot eller tillämpar inga principer].

Min app kan inte ta emot data från en annan hanterad app

Bekräfta de inställningar för appskyddsprinciper som är riktade till både din app och den andra hanterade appen. Vi rekommenderar att du har samma principmål för båda apparna. Principen för din app ska ha "Ta emot data från andra appar" inställd på "Principhanterade appar". Kontrollera principen för den andra appen. Om "Skicka organisationsdata till andra appar" har angetts till "Ingen" förväntas det här beteendet.

Nästa steg

När du har slutfört alla avslutsvillkor ovan har appen nu integrerats som en enda identitet och kan tillämpa alla grundläggande appskyddsprinciper. Följande avsnitt, steg 5: Flera identiteter, steg 6: Appkonfiguration och steg 7: Funktioner för appdeltagande kan behövas eller inte, beroende på appens önskade stöd för appskyddsprincipen. Om du är osäker på om något av de här avsnitten gäller för din app kan du gå tillbaka till Viktiga beslut för SDK-integrering.