Dela via


Intune App SDK för Android – funktioner för appdeltagande

Med Microsoft Intune App SDK för Android kan du införliva Intunes 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 Planera integreringen.

Steg 7: Funktioner för app med deltagande

Steg Goals

  • Lär dig mer om de olika funktioner för app deltagande som erbjuds av Intune App SDK.
  • Integrera funktioner för att delta i appar som är relevanta för din app och dina användare.
  • Testa integreringen av dessa funktioner.

Vad är "App Participation Features"?

Den här SDK-integreringsprocessen försöker minimera mängden appspecifik kod som utvecklare behöver skriva. Genom att slutföra de tidigare stegen i SDK-integreringen kan din app nu framtvinga de flesta principinställningar för appskydd, till exempel filkryptering, begränsningar för kopiering/inklistring, blockering av skärmbilder och dataöverföringsbegränsningar.

Det finns dock vissa inställningar som kräver appspecifik kod för att framtvinga korrekt; dessa kallas funktioner för app deltagande. Vanligtvis har SDK:t inte tillräckligt med kontext om programmets kod eller slutanvändarscenariot för att automatiskt framtvinga de här inställningarna, och därför förlitar sig utvecklarna på att anropa SDK-API:erna på rätt sätt.

Appandelsfunktioner är inte nödvändigtvis valfria. Beroende på appens befintliga funktioner kan dessa funktioner krävas. Mer information finns i Viktiga beslut för SDK-integrering .

Tidigare steg i den här guiden har redan beskrivit flera funktioner för app deltagande:

Resten av den här guiden beskriver den återstående uppsättningen funktioner för app deltagande:

  • Framtvinga princip som begränsar sparande av filer till/öppnar filer från lokal lagring eller molnlagring.
  • Framtvinga principbegränsning av innehåll i meddelanden.
  • Framtvinga princip som skyddar säkerhetskopieringsdata.
  • Framtvinga principbegränsning av skärmdumpar (om din app har anpassad kod för skärmdump).
  • Stöd för appskydds-CA.
  • Registrera dig för meddelanden från SDK.
  • Tillämpa anpassat programtema.
  • Använd betrodda certifikat från Intune för att säkerställa förtroendekedjan för lokala slutpunkter.

Grundläggande funktioner för app med deltagande

AppPolicy-gränssnittet innehåller många metoder som informerar din app om vissa åtgärder är tillåtna.

De flesta funktioner för app deltagande omfattar:

  • Identifiera rätt plats i appens kod för att kontrollera om en åtgärd tillåts.
  • Anropa en AppPolicy metod för att kontrollera om en åtgärd är tillåten, baserat på den för närvarande konfigurerade principen.
  • Beroende på resultatet kan du antingen tillåta att åtgärden slutförs eller ändra appens beteende när åtgärden blockeras.

Om du vill hämta en AppPolicy instans använder du någon av MAMPolicyManager-metoderna , till exempel getPolicy eller getPolicyForIdentity(final String identity).

Informationsmetoder i AppPolicy

Alla metoder i AppPolicy är inte knutna till en app med deltagandefunktion. Vissa metoder är informationsbaserade, vilket ger dina appdata om vilka principer som för närvarande är konfigurerade, även om dessa principer tillämpas automatiskt av SDK: et. Dessa metoder finns för att ge din app möjligheter att presentera anpassad användarupplevelse när specifika principer konfigureras.

Exempel: Avgöra om skärmbilder blockeras

Om din app har en kontroll som låter användaren ta en skärmbild kanske du vill inaktivera eller dölja den kontrollen om appskyddsprincipen har skärmbilder blockerade.

Din app kan kontrollera detta genom att anropa MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Princip för att begränsa dataöverföring mellan appar och enheter eller molnlagringsplatser

Många appar gör att slutanvändaren kan spara data till eller öppna data från lokal fillagring eller molnlagringstjänster. Med Intune App SDK kan IT-administratörer skydda mot inkommande data och dataläckage genom att begränsa var appar kan spara data till och öppna data från.

Obs!

Om din app tillåter att du sparar till personliga platser eller molnplatser direkt från appen eller tillåter att data öppnas direkt i appen, måste du implementera den här intune App SDK-appens deltagandefunktion så att IT-administratörer kan blockera den här besparingen/öppningen.

Spara till enhet eller molnlagring

API:et getIsSaveToLocationAllowed meddelar din app om det är tillåtet att spara på vissa platser för en viss identitet, baserat på den konfigurerade principen:

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

För att avgöra om din app ska implementera getIsSaveToLocationAllowed kontrollen kontrollerar du om din app stöder utgående data genom att läsa följande tabell:

service Parameter: SaveLocation Uppräkningsvärde Användningsfall Associerat användarnamn
ONEDRIVE_FOR_BUSINESS Appen sparar data till OneDrive. A username för ett konto som används för både molntjänstautentisering och Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
SHAREPOINT Appen sparar data till Sharepoint. A username för ett konto som används för både molntjänstautentisering och Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
BOX Den här appen sparar data till Box. A username för ett konto som används för både molntjänstautentisering och Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
LOCAL Appen sparar data till en extern lagringsplats på enheten som inte är appens privata lagringsplats. Den externa lagringen betraktas inte som en molntjänst och bör därför alltid användas med en null användarnamnsparameter.
PHOTO_LIBRARY Appen sparar data till lokal Android-fotolagring. Den lokala Android-fotolagringen betraktas inte som en molntjänst och bör därför alltid användas med en null användarnamnsparameter.
ACCOUNT_DOCUMENT Appen sparar data till en plats som är associerad med ett konto i appen och inte är en av de specifika molnplatser som anges ovan. *Den här platsen ska användas för att avgöra om data kan skickas mellan konton i en app med flera identiteter.- A username för ett konto som används för Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
OTHER Appen sparar data till en plats som inte anges ovan och uppfyller inte kriterierna för ACCOUNT_DOCUMENT. username Utvärderas inte för den här platsen och bör därför vara null.

Filer som placeras i privat applagring som antingen är nödvändiga för appåtgärd eller som laddas ned tillfälligt för visning tillåts alltid. du behöver inte kontrollera getIsSaveToLocationAllowed. Sök efter SaveLocation.LOCAL

  1. Filer som sparats utanför privat applagring.
  2. Filer som laddats ned till privat applagring som inte är nödvändiga för appåtgärd (till exempel användare som medvetet väljer att ladda ned till enheten).

Obs!

När du kontrollerar spara-principen username ska vara upn/användarnamn/e-post som är associerad med molntjänsten som sparas till (inte nödvändigtvis samma som kontot som äger dokumentet som sparas).

Öppna data från en lokal lagringsplats eller molnlagringsplats

API:et getIsOpenFromLocationAllowed meddelar din app om öppning från vissa platser tillåts för en viss identitet, baserat på den konfigurerade principen:

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

För att avgöra om din app ska implementera getIsOpenFromLocationAllowed kontrollen kontrollerar du om din app stöder inkommande data genom att läsa följande tabell:

location Parameter: OpenLocation Uppräkningsvärde Användningsfall Associerat användarnamn
ONEDRIVE_FOR_BUSINESS Appen öppnar data från OneDrive. A username för ett konto som används för både molntjänstautentisering och Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
SHAREPOINT Appen öppnar data från Sharepoint. A username för ett konto som används för både molntjänstautentisering och Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
CAMERA Appen öppnar data från kameran. Ett null värde eftersom enhetskameran inte är en molntjänst.
LOCAL Appen öppnar data från en extern lagringsplats på enheten som inte är appens privata lagringsplats. Även om den externa lagringen inte är en molntjänstplats förväntas en username parameter eftersom den anger ägarskap.
När du öppnar en fil från lokal lagring måste filägaren alltid övervägas, eftersom filägarens spara-som-princip kan eller kanske inte tillåter andra identiteter att öppna filen:
- För identitetstaggade filer,username ska vara filägarens identitet.
- För filer utan identitetstagg,username ska vara null.
PHOTO_LIBRARY Appen öppnar data från lokal Android-fotolagring. Den lokala Android-fotolagringen betraktas inte som en molntjänst och bör därför alltid användas med en null användarnamnsparameter.
ACCOUNT_DOCUMENT Appen öppnar data från en plats som är associerad med ett konto i appen och inte är en av de specifika molnplatser som anges ovan. *Den här platsen ska användas för att avgöra om data kan skickas mellan konton i en app med flera identiteter.- A username för ett konto som används för Microsoft Entra autentisering. Om det inte finns något sådant användarnamn eller om användarnamnet inte är känt använder du null.
OTHER Appen öppnar data från en plats som inte anges ovan och uppfyller inte kriterierna för ACCOUNT_DOCUMENT. username Utvärderas inte för den här platsen och bör därför vara null.

Obs!

När du kontrollerar den öppna principen username ska vara det UPN/användarnamn/e-postmeddelande som är associerat med filen eller molntjänsten som öppnas från (inte nödvändigtvis samma som kontot som öppnar dokumentet).

Tips

För enkelhetens skull tillhandahåller SDK-metoden AppPolicy.isOpenFromLocalStorageAllowed som tar en File parameter för en fil i lokal lagring. Det villkor för att framtvinga principen är funktionellt identiska med anrop AppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username) förutom att den hanterar parsning av filägarens username från File.

Dialogrutan Delning har blockerats

SDK:t innehåller en dialogruta för att meddela användaren att en dataöverföringsåtgärd har blockerats av MAM-principen.

Dialogrutan ska visas för användaren när API-anropet isSaveToAllowedForLocation eller isOpenFromAllowedForLocation resulterar i att åtgärden spara/öppna blockeras. Dialogrutan visar ett allmänt meddelande och återgår till anropet Activity när det avvisas.

Om du vill visa dialogrutan lägger du till följande kod:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Tillåt fildelning

Om det inte är tillåtet att spara till offentliga lagringsplatser bör appen fortfarande tillåta att användaren visar filer genom att ladda ned dem till app privat lagring och sedan öppna dem med system väljaren.

Princip för att begränsa innehåll i meddelanden

För appar med en enda identitet försöker Intune App SDK:s standardbeteende blockera alla meddelanden när App Protection Policy begränsar meddelanden.

Standardbeteendet för SDK:et är begränsat. SDK:t kan inte automatiskt respektera värdet "Blockera organisationsdata", som är avsett att endast ta bort hanterat innehåll från meddelanden. För appar med flera identiteter kan SDK:t inte avgöra vilka meddelanden som innehåller hanterat innehåll.

Om din app visar meddelanden och den antingen är flera identiteter och/eller vill respektera värdet "Blockera organisationsdata" måste den kontrollera principen för begränsning av meddelanden för kontot som är associerat med meddelandet innan meddelandet visas.

Gör följande anrop för att avgöra om principen tillämpas:

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

Den returnerade NotificationRestriction uppräkningen har följande värden:

NotificationRestriction Enum Förväntat appbeteende
BLOCKED Appen får inte visa några meddelanden för det konto som är associerat med den här principen. För appar med en enda identitet blockerar Intune App SDK alla meddelanden automatiskt och ingen ytterligare kod krävs.
BLOCK_ORG_DATA Appen måste visa ett ändrat meddelande som inte innehåller organisationsdata.
UNRESTRICTED Appen bör visa alla meddelanden.

Om appen inte anropar getNotificationRestrictionkorrekt gör MAM SDK ett bra försök att begränsa aviseringar automatiskt för appar med en enda identitet.

I det här fallet BLOCK_ORG_DATA behandlas samma som BLOCKED och meddelandet visas inte alls.

Om du vill ha mer detaljerad kontroll kontrollerar du värdet för getNotificationRestriction och ändrar appmeddelanden på rätt sätt.

Princip för att skydda säkerhetskopierade data

Intune App SDK kan blockera datauppladdning till Androids inbyggda funktion för säkerhetskopiering och återställning. Mer information om säkerhetskopiering och återställning i Android finns i Android API-guiden och de ändringar som introducerades i Android S / 12 här: Ändra till säkerhetskopiering och återställning.

Automatisk säkerhetskopiering för appar

Från och med Android M började Android erbjuda automatiska fullständiga säkerhetskopieringar till Google Drive för appar, oavsett appens mål-API.

Med Intune kan du använda alla funktioner för automatisk återställning som är tillgängliga från Android, inklusive möjligheten att definiera anpassade regler i XML, med specifik Intune-integreringsvägledning för att säkerställa att dataskyddet tillämpas.

Konfigurera säkerhetskopieringsbeteende i appens manifest

Som standard android:allowBackup är inställt på true enligt beskrivningen i aktivera och inaktivera säkerhetskopiering.

Om din app inte kräver fullständig säkerhetskopierings- och återställningsfunktion anger du android:allowBackup till false. I det här fallet krävs ingen ytterligare åtgärd och "företagsdata" finns kvar i appen.

Om din app kräver fullständig säkerhetskopierings- och återställningsfunktion anger du android:allowBackup till sant och utför följande ytterligare steg:

  1. Om din app inte använder sin egen anpassade BackupAgentanvänder du MAMBackupAgent som standard för att tillåta automatiska fullständiga säkerhetskopieringar som är intune-principkompatibla. Placera följande i appmanifestet:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [Valfritt] Om du har implementerat en valfri anpassad BackupAgentmåste du se till att använda MAMBackupAgent eller MAMBackupAgentHelper. Se följande avsnitt. Överväg att byta till att använda Intunes MAMDefaultBackupAgent, som beskrivs i steg 1, som ger enkel säkerhetskopiering på Android M och senare.

  3. När du bestämmer vilken typ av fullständig säkerhetskopiering din app ska ta emot (ofiltrerad, filtrerad eller ingen) måste du ange attributet android:fullBackupContent till true, false eller en XML-resurs i din app.

  4. Sedan måste du kopiera värdet för android:fullBackupContent till com.microsoft.intune.mam.FullBackupContent metadatataggen och för appar som stöder det nya XML-konfigurationsformatet som lagts till i API 31 till com.microsoft.intune.mam.DataExtractionRules metadatataggen.

    • Exempel 1: Om du vill att din app ska ha fullständiga säkerhetskopior utan undantag måste du ange attribut och metadatataggar till true:

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • Exempel 2: Om du vill att din app ska använda sin anpassade BackupAgent och avregistrera sig från fullständig, Intune-principkompatibel, automatisk säkerhetskopiering, måste du ange attribut och metadatataggar till false:

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • Exempel 3: Om du vill att din app ska ha fullständiga säkerhetskopior enligt dina anpassade regler som definierats i en XML-fil anger du attributet och metadatataggen till samma XML-resurs:

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

Säkerhetskopiering av nyckel/värde

Alternativet Nyckel-/värdesäkerhetskopiering är tillgängligt för alla API:er 8+ och laddar upp appdata till Android Backup Service. Mängden data per app är begränsad till 5 MB. Om du använder nyckel-/värdesäkerhetskopiering måste du använda en BackupAgentHelper eller en BackupAgent.

BackupAgentHelper

BackupAgentHelper är enklare att implementera än BackupAgent både när det gäller inbyggda Android-funktioner och Intune MAM-integrering BackupAgentHelper gör det möjligt för utvecklaren att registrera hela filer och delade inställningar till en FileBackupHelper och SharedPreferencesBackupHelper (respektive) som sedan läggs till i BackupAgentHelper när de skapas. Följ stegen nedan för att använda en BackupAgentHelper med Intune MAM:

  1. Om du vill använda säkerhetskopiering med flera identiteter med följer BackupAgentHelperdu Android-guiden för att utöka BackupAgentHelper.

  2. Låt klassen utöka MAM-motsvarigheten till BackupAgentHelper, FileBackupHelper och SharedPreferencesBackupHelper.

Android-klass MAM-motsvarighet
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Om du följer de här riktlinjerna får du en lyckad säkerhetskopiering och återställning av flera identiteter.

BackupAgent

Med En BackupAgent kan du vara mycket mer explicit om vilka data som säkerhetskopieras. Eftersom utvecklaren är ganska ansvarig för implementeringen krävs det fler steg för att säkerställa lämpligt dataskydd från Intune. Eftersom det mesta av arbetet skickas till dig, utvecklaren, är Intune-integreringen något mer involverad.

Integrera MAM:

  1. Läs noggrant Igenom Android-guiden för nyckel-/värdesäkerhetskopiering och specifikt Utöka BackupAgent för att säkerställa att din BackupAgent-implementering följer Android-riktlinjerna.

  2. Låt klassen utöka MAMBackupAgent.

Säkerhetskopiering med flera identiteter:

  1. Innan du påbörjar säkerhetskopieringen kontrollerar du att de filer eller databuffertar som du planerar att säkerhetskopiera verkligen tillåts av IT-administratören att säkerhetskopieras i scenarier med flera identiteter. Använd isBackupAllowed i MAMFileProtectionManager och MAMDataProtectionManager för att fastställa detta. Om filen eller databufferten inte får säkerhetskopieras bör du inte inkludera den i säkerhetskopian.

  2. Om du någon gång under säkerhetskopieringen vill säkerhetskopiera identiteterna för de filer som du checkade in i steg 1 måste du anropa backupMAMFileIdentity(BackupDataOutput data, File … files) med de filer som du planerar att extrahera data från. Detta skapar automatiskt nya säkerhetskopieringsentiteter och skriver dem till BackupDataOutput åt dig. Dessa entiteter förbrukas automatiskt vid återställning.

Återställning med flera identiteter: Guiden för datasäkerhetskopiering anger en allmän algoritm för att återställa programmets data och innehåller ett kodexempel i avsnittet Utöka BackupAgent . För att få en lyckad återställning med flera identiteter måste du följa den allmänna strukturen i det här kodexemplet med särskild uppmärksamhet på följande:

  1. Du måste använda en while(data.readNextHeader())* -loop för att gå igenom säkerhetskopieringsentiteterna.

  2. Du måste anropa data.skipEntityData()om data.getKey() inte matchar nyckeln som du skrev i onBackup. Utan att utföra det här steget kanske dina återställningar inte lyckas.

  3. Undvik att returnera när du använder säkerhetskopieringsentiteter i *-konstruktionen while(data.readNextHeader()), eftersom de entiteter som vi automatiskt skriver går förlorade.

  • Där data är det lokala variabelnamnet för MAMBackupDataInput som skickas till din app vid återställning.

Begränsningar för anpassad skärmdump

Om din app innehåller en anpassad skärmdumpsfunktion som kringgår Androids Windowbegränsning på -nivå FLAG_SECURE måste du kontrollera skärmdumpsprincipen innan du ger fullständig åtkomst till funktionen. Om din app till exempel använder en anpassad renderingsmotor för att återge den aktuella vyn till en PNG-fil måste du först kontrollera AppPolicy.getIsScreenCaptureAllowed().

Obs!

Om din app inte innehåller några anpassade skärmdumpsfunktioner eller skärmdumpsfunktioner från tredje part behöver du inte vidta några åtgärder för att begränsa skärmdumpar. Policyn för skärmdump tillämpas automatiskt på Window nivån för alla MAM-integrerade appar. Alla försök från operativsystemet eller en annan app att registrera en Window i din app blockeras efter behov. Om en användare till exempel försöker fånga appens skärm via Androids inbyggda skärmbilds- eller skärminspelningsfunktioner begränsas avbildningen automatiskt utan deltagande från din app.

Stöd för appskydds-CA

App Protection CA (villkorsstyrd åtkomst), även kallat appbaserad CA, begränsar åtkomsten till resurser tills ditt program hanteras av Intunes appskyddsprinciper. Microsoft Entra ID framtvingar detta genom att kräva att appen registreras och hanteras av APP innan en token beviljas för åtkomst till en CA-skyddad resurs.

Obs!

Stöd för App Protection CA kräver version 1.0.0 (eller senare) av MSAL-biblioteket.

Hantera inkompatibilitet med MSAL

När du hämtar en token för ett konto kan MSAL-biblioteket returnera eller utlösa en MsalIntuneAppProtectionPolicyRequiredException för att indikera inkompatibilitet med hantering av appskyddsprinciper. Ytterligare parametrar kan extraheras från undantaget för användning vid reparation av efterlevnad (se MAMComplianceManager). När reparationen har slutförts kan appen försöka hämta token igen via MSAL.

MAMComplianceManager

MAMComplianceManager-gränssnittet används när det principfel som krävs tas emot från MSAL. Den innehåller metoden [remediateCompliance] som ska anropas för att försöka försätta appen i ett kompatibelt tillstånd. En referens till MAMComplianceManager kan erhållas på följande sätt:

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

// make use of mgr

Den returnerade instansen MAMComplianceManager är garanterat inte null.

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

Metoden remediateCompliance() anropas för att försöka sätta appen under hantering för att uppfylla villkoren för Microsoft Entra ID för att bevilja den begärda token. De första fyra parametrarna kan extraheras från undantaget som tas emot av MSAL-metoden AuthenticationCallback.onError() (se kodexemplet nedan). Den sista parametern är ett booleskt värde som styr om ett UX visas under kompatibilitetsförsöket.

remediateCompliance visar en enkel dialogruta för blockeringsstatus så att appar inte behöver visa anpassat UX under den här åtgärden. Den här dialogrutan visas bara när kompatibilitetsreparationen pågår. det kommer inte att visa slutresultatet. Din app kan registrera en mottagare för meddelandet för COMPLIANCE_STATUS att hantera lyckade eller misslyckade efterlevnadsåtgärdsförsök. Mer information finns i Meddelanden om efterlevnadsstatus .

remediateCompliance() kan initiera en MAM-registrering som en del av att upprätta efterlevnad. Appen kan få ett registreringsmeddelande om den har registrerat en meddelandemottagare för registreringsmeddelanden. Appens registrerade MAMServiceAuthenticationCallback får sin acquireToken() metod anropad för att hämta en token för registreringen. acquireToken() anropas innan appen har hämtat sin egen token, så eventuella bokförings- eller kontoskapande uppgifter som appen gör efter ett lyckat tokenförvärv kanske inte har gjorts ännu. Motringningen måste kunna hämta en token i det här fallet.

Om du inte kan returnera en token från acquireToken()misslyckas kompatibilitetsåtgärdsförsöket.

Om du anropar updateToken senare med en giltig token för den begärda resursen görs ett nytt försök att åtgärda efterlevnaden omedelbart med den angivna token.

Obs!

Tyst tokenhämtning är fortfarande möjligt eftersom acquireToken() användaren redan har guidats för att installera asynkron meddelandekö och registrera enheten innan undantaget MsalIntuneAppProtectionPolicyRequiredException tas emot. Detta resulterar i att den asynkrona meddelandekön har en giltig uppdateringstoken i cacheminnet, vilket gör att tyst förvärv av den begärda token kan lyckas.

Här är ett exempel på hur du tar emot det princip nödvändiga felet i AuthenticationCallback.onError() metoden och anropar MAMComplianceManager för att hantera felet.

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

Meddelanden om efterlevnadsstatus

Om appen registreras för aviseringar av typen COMPLIANCE_STATUSskickas en MAMComplianceNotification för att informera appen om den slutliga statusen för kompatibilitetsåtgärdsförsöket. Mer information om registrering finns i Registrera för meddelanden från SDK .

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

Metoden getComplianceStatus() returnerar resultatet av kompatibilitetsåtgärdsförsöket som ett värde från [MAMCAComplianceStatus]-uppräkningen.

Statuskod Förklaring
UNKNOWN Statusen är okänd. Detta kan tyda på en oväntad felorsak. Ytterligare information finns i Företagsportal loggarna.
COMPLIANT Efterlevnadsreparationen har slutförts och appen är nu kompatibel med principen. Hämtningen av MSAL-token bör göras om.
NOT_COMPLIANT Det gick inte att åtgärda kompatibiliteten. Appen är inte kompatibel och MSAL-tokenförvärvet bör inte göras om förrän felvillkoret har korrigerats. Ytterligare felinformation skickas med MAMComplianceNotification.
SERVICE_FAILURE Det uppstod ett fel när kompatibilitetsdata skulle hämtas från Intune-tjänsten. Ytterligare information finns i Företagsportal loggarna.
NETWORK_FAILURE Ett fel uppstod vid anslutning till Intune-tjänsten. Appen bör försöka hämta sin token igen när nätverksanslutningen återställs.
CLIENT_ERROR Försöket att åtgärda kompatibiliteten misslyckades av någon anledning som är relaterad till klienten. Till exempel ingen token eller fel användare. Ytterligare felinformation skickas med MAMComplianceNotification.
PENDING Försöket att åtgärda kompatibiliteten misslyckades eftersom statussvaret ännu inte hade tagits emot från tjänsten när tidsgränsen överskreds. Appen bör prova sitt tokenförvärv igen senare.
COMPANY_PORTAL_REQUIRED Företagsportal måste installeras på enheten för att kompatibilitetsreparationen ska lyckas. Om Företagsportal redan är installerat på enheten måste appen startas om. I det här fallet visas en dialogruta där användaren uppmanas att starta om appen.

Om kompatibilitetsstatusen är MAMCAComplianceStatus.COMPLIANTbör appen initiera sitt ursprungliga tokenförvärv (för sin egen resurs).

Om kompatibilitetsåtgärdsförsöket getComplianceErrorTitle() misslyckades returnerar metoderna och getComplianceErrorMessage() lokaliserade strängar som appen kan visa för slutanvändaren om den väljer det. De flesta felfall kan inte åtgärdas av appen, så i det allmänna fallet kan det vara bäst att inte skapa eller logga in på kontot och låta användaren försöka igen senare.

Om ett fel är beständigt kan Företagsportal loggar hjälpa dig att fastställa orsaken. Slutanvändaren kan skicka loggarna. Mer information finns i Ladda upp och e-postloggar.

Här är ett exempel på hur du registrerar en mottagare med hjälp av en anonym klass för att implementera MAMNotificationReceiver-gränssnittet:

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
            
            // take appropriate action based on complianceNotification.getComplianceStatus()
            
            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

Obs!

Meddelandemottagaren måste registreras innan den anropas remediateCompliance() för att undvika ett konkurrenstillstånd som kan leda till att meddelandet missas.

Deklarera stöd för App Protection CA

När din app är redo att hantera app-CA-reparation kan du berätta för Microsoft Identity att din app är app-CA redo. Om du vill göra detta i ditt MSAL-program skapar du din offentliga klient med hjälp av klientfunktionerna i "protapp"

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

När du har slutfört ovanstående fortsätter du till Verifiera appskydds-CA:n nedan.

Implementeringsanteckningar

Obs!

Appens MAMServiceAuthenticationCallback.acquireToken() -metod ska skicka false för forceRefresh flaggan till acquireTokenSilentAsync().

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

Obs!

Om du vill visa ett anpassat blockerande UX under reparationsförsöket bör du skicka false för showUX-parametern till remediateCompliance(). Du måste se till att du visar ditt UX och registrerar meddelandelyssnaren först innan du anropar remediateCompliance(). Detta förhindrar ett konkurrenstillstånd där meddelandet kan missas om remediateCompliance() det misslyckas mycket snabbt. Metoden eller onMAMCreate() för en aktivitetsunderklass är till exempel onCreate() den perfekta platsen för att registrera meddelandelyssnaren och sedan anropa remediateCompliance(). Parametrarna för remediateCompliance() kan skickas till ditt UX som intent extra. När meddelandet om efterlevnadsstatus tas emot kan du visa resultatet eller helt enkelt slutföra aktiviteten.

Obs!

remediateCompliance() registrerar kontot och försöker registrera. När huvudtoken har hämtats är det inte nödvändigt att anropa registerAccountForMAM() , men det skadar inte att göra det. Om appen å andra sidan inte kan hämta sin token och vill ta bort användarkontot måste den anropa unregisterAccountForMAM() för att ta bort kontot och förhindra återförsök med bakgrundsregistrering.

Registrera dig för meddelanden från SDK

Intune App SDK-guiden har redan diskuterat flera scenarier där din app kan behöva registreras för meddelanden från SDK, till exempel:

I det här avsnittet beskrivs alla typer av meddelanden som SDK kan skicka, när och varför ditt program vill lyssna efter det och hur du implementerar en meddelandemottagare.

Typer av meddelanden

Alla SDK-meddelanden implementerar MAMNotification-gränssnittet , som har en enda funktion, getType(), som returnerar en MAMNotificationType-uppräkning .

De flesta meddelanden är MAMUserNotifications, som tillhandahåller information som är specifik för en enda identitet, som kan hämtas via getUserIdentity() funktionen.

MAMEnrollmentNotification och MAMComplianceNotification utökar MAMUserNotificationytterligare , som innehåller resultat för försök att registrera en användare/enhet med MAM-tjänsten och resultatet för försök att åtgärda kompatibiliteten för App Protection CA.

Meddelandetyp Meddelandeklass Orsak till avisering Tillämplighet Tips för hantering Trådinformation
COMPLIANCE_STATUS MAMComplianceNotification Returnerar resultatet av ett försök till efterlevnadsreparation. Appar som implementerar App Protection CA måste hantera detta. - Nondeterministisk
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Returnerar resultatet av ett registreringsförsök. Alla appar får detta. - Nondeterministisk
MANAGEMENT_REMOVED MAMUserNotification Appen håller på att bli ohanterad. Appar som använder MAMDataProtectionManager måste hantera detta. Se MANAGEMENT_REMOVED nedan. Aldrig på UI-tråd
REFRESH_APP_CONFIG MAMUserNotification Appkonfigurationsvärdena kan ha ändrats. Appar som implementerar appkonfiguration och cachelagrade appkonfigurationsdata måste hantera detta. Appar måste ogiltigförklara och uppdatera cachelagrade appkonfigurationsdata. Nondeterministisk
REFRESH_POLICY MAMUserNotification Appskydd principen kan ha ändrats. Appar som cachelagrade appskyddsprincipen måste hantera detta. Appar måste ogiltigförklara och uppdatera cachelagrade principdata för appskydd. Nondeterministisk
WIPE_USER_DATA MAMUserNotification Rensningen håller på att ske(*). Appar som använder MAMDataProtectionManager måste hantera detta ellerWIPE_USER_AUXILIARY_DATA. Se Selektiv rensning. Aldrig på UI-tråd
WIPE_USER_AUXILIARY_DATA MAMUserNotification Rensningen håller på att ske(*). Endast appar med flera identiteter får detta.
Appar som använder MAMDataProtectionManager måste hantera detta ellerWIPE_USER_DATA.
Se Selektiv rensning. Aldrig på UI-tråd
WIPE_COMPLETED MAMUserNotification Rensningen har slutförts. Alltid valfritt. Levereras efter WIPE_USER_DATA eller WIPE_USER_AUXILIARY_DATA. *Om appen rapporterar ett fel från hanteraren för WIPE_USER_DATA eller WIPE_USER_AUXILIARY_DATAskickas inte det här meddelandet.- Aldrig på UI-tråd

(*) Rensningar kan inträffa av många orsaker, till exempel:

  • Din app heter unregisterAccountForMAM.
  • En IT-administratör initierade en fjärrensning.
  • Admin villkorsstyrda åtkomstprinciper som krävs uppfylldes inte.

Varning

En app bör aldrig registreras för både meddelandena WIPE_USER_DATA och WIPE_USER_AUXILIARY_DATA .

MANAGEMENT_REMOVED

Meddelandet MANAGEMENT_REMOVED informerar appen om att ett tidigare principhanterat konto håller på att bli ohanterat. När kontot är ohanterat kan appen inte längre läsa kontots krypterade filer, läsa kontots data krypterade med MAMDataProtectionManager, interagera med det krypterade Urklipp eller på annat sätt delta i ekosystemet för hanterade appar.

Detta kräver inte rensning av användardata eller utloggning av användaren (om en rensning krävs skickas ett WIPE_USER_DATA meddelande). Många appar kanske inte behöver hantera det här meddelandet, men appar som använder MAMDataProtectionManager måste hantera detta. Mer information finns i Dataskydd för databuffert .

När SDK anropar appens MANAGEMENT_REMOVED mottagare är följande sant:

  • SDK:et har redan dekrypterat tidigare krypterade filer (men inte skyddade databuffertar) som tillhör appen. Filer på offentliga platser på sdcard som inte direkt tillhör appen (till exempel mapparna Dokument eller Ladda ned) dekrypteras inte.

  • Nya filer eller skyddade databuffertar som skapats av mottagarmetoden (eller någon annan kod som körs efter att mottagaren startar) krypteras inte.

  • Appen har fortfarande åtkomst till krypteringsnycklar, så åtgärder som att dekryptera databuffertar kommer att lyckas.

När appens mottagare returneras har den inte längre åtkomst till krypteringsnycklar.

Implementera MAMNotificationReceiver

Om du vill registrera dig för meddelanden från SDK måste din app skapa en MAMNotificationReceiver och registrera den med MAMNotificationReceiverRegistry.

Om du vill registrera mottagaren anropar registerReceiver du med mottagaren och önskad meddelandetyp i din Application.onCreate metod:

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

Appens MAMNotificationReceiver-implementering måste innehålla onReceive(MAMNotification notification) metoden . Den här metoden anropas individuellt för varje mottaget meddelande och måste returnera en boolean. I allmänhet bör den här metoden alltid returnera true, såvida inte programmet påträffade ett fel som svarade på ett meddelande.

Precis som med andra typer av Android-mottagare har ditt program flexibilitet när det gäller att hantera meddelanden:

  • Det kan skapa distinkta MAMNotificationReceiver-implementeringar för distinkta meddelandetyper (beskrivs nedan). I det här fallet bör du registrera varje implementering och varje meddelandetyp separat.
  • Den kan använda en enda MAMNotificationReceiver-implementering som innehåller logik för att svara på flera olika meddelandetyper. I det här fallet måste den registreras för varje typ av meddelande som den kan svara på.
  • Det kan skapa flera MAMNotificationReceiver-implementeringar som var och en svarar på samma meddelandetyp. I det här fallet måste båda vara registrerade på samma meddelandetyp.

Tips

Det är säkert att blockera in MAMNotificationReceiver.onReceive eftersom återanropet inte körs i användargränssnittstråden.

Anpassade teman

Ett anpassat tema kan ges till Intune App SDK; det här anpassade temat tillämpas på alla SDK-skärmar och dialogrutor. Om inget tema anges används standard-SDK-temat.

Ange ett anpassat tema

Om du vill ange ett tema måste du lägga till följande kodrad i Application.onMAMCreate metoden:

MAMThemeManager.setAppTheme(R.style.AppTheme);

I exemplet ovan måste du ersätta R.style.AppTheme med det formattema som du vill att SDK ska använda.

Hantering av betrodda rotcertifikat

Om ditt program kräver SSL/TLS-certifikat som utfärdats av en lokal eller privat certifikatutfärdare för att ge säker åtkomst till interna webbplatser och program, har Intune App SDK lagt till stöd för hantering av certifikatförtroende med hjälp av API-klasserna MAMTrustedRootCertsManager och MAMCertTrustWebViewClient.

Obs!

MAMCertTrustWebViewClient stöder Android 10 eller senare.

Hantering av betrodda rotcertifikat har stöd för:

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • Webview

Krav

Obs!

Hantering av betrodda rotcertifikat kan användas oberoende av Microsoft Tunnel VPN Gateway, men du måste licensiera Microsoft MAM Tunnel för användning.

Använda betrodda rotcertifikat från Intune för att upprätta förtroendeankare

Med hantering av betrodda rotcertifikat kan din app använda betrodda rotcertifikat från Intune i kombination med certifikat från enheten.

API-klasserna MAMTrustedRootCertsManager och MAMCertTrustWebViewClient använder intune-betrodda rotcertifikat som levereras via App Configuration Princip som reservalternativ om enhetens betrodda rotcertifikatarkiv inte innehåller de betrodda rotcertifikat som krävs för att upprätta en säker anslutning till lokala resurser. På så sätt kan appen använda både enhets- och Intune-certifikat för att verifiera säkra anslutningar och kommunikation med betrodda källor.

Om du vill förbättra nätverkssäkerhetsinställningarna kan en app använda XML-filen För nätverkssäkerhetskonfiguration. Hantering av betrodda rotcertifikat respekterar den här extra säkerheten genom att kontrollera om appens XML för nätverkssäkerhetskonfiguration har någon av följande funktioner:

  • Anpassade förtroendeankare med ytterligare certifikatutfärdare, till exempel självsignerade certifikat.
  • Domänspecifika regler för att begränsa betrodda certifikatutfärdare.
  • Fäst uppsättningar för certifikat för specifika domäner.

Obs!

Läs mer om Konfiguration av nätverkssäkerhet i Android på: Nätverkssäkerhetskonfiguration

Om något av dessa gäller för en domän som kontrolleras för förtroende hoppar Hantering av betrodda rotcertifikat över de anpassade förtroendekontrollerna för den här domänen och låter endast plattformens standardförtroendehanterare utföra kontrollerna.

Klassen MAMTrustedRootCertsManager

Den här klassen innehåller följande API:er:

  • createSSLContext(String identity, String protocol): skapar ett SSLContext objekt som använder betrodda rotcertifikat för den angivna identiteten och det angivna SSL/TLS-protokollet. Det returnerade SSLContext objektet från den här klassen har redan initierats korrekt med X509TrustManager objekt som använder de kombinerade betrodda rotcertifikaten från enheten och MAM-tjänsten.
  • createSSLSocketFactory(String identity, String protocol): skapar ett SSLSocketFactory objekt som använder betrodda rotcertifikat för den angivna identiteten och det angivna SSL/TLS-protokollet. Det returnerade SSLSocketFactory objektet refereras från samma SSLContext objekt i den här klassen.
  • createX509TrustManagers(String identity): skapar en matris med X509TrustManager objekt som använder de kombinerade betrodda rotcertifikaten från enheten och MAM-tjänsten för den angivna identiteten.

Obs!

Parametern identity förväntas vara en strängidentifierare för en viss användare som kör programmet, till exempel deras UPN. Om användaridentifieraren är okänd i förväg kan värdet null skickas in och MAM försöker identifiera rätt identitet från tråden eller processen där dessa API:er anropas. Identiteten måste anges på processen eller tråden korrekt för att MAM ska kunna identifiera identiteten. Om du vill veta mer om hur du ställer in den aktiva identiteten på en process eller tråd besöker du: Steg 5: Flera identiteter

Obs!

När parametern protocol inte anges används det SSL/TLS-protokoll som stöds högst på plattformen.

Här följer några exempel på hur du använder den här klassen.

Exempel med httpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactory(identity, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
Exempel med okHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagers(identity);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);  

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

Klassen MAMCertTrustWebViewClient

Den här klassen tillhandahåller en anpassad implementering av Android-klassen android.webkit.WebViewClient som ger ett sätt att hantera SSL-felet android.net.http.SslError.SSL_UNTRUSTED i WebView. Vid hanteringen av felet använder klassen betrodda rotcertifikat som har konfigurerats i Intune och tagits emot från MAM-tjänsten för att kontrollera värdens tillförlitlighet från mål-URL:en som genererade SSL-felet i WebView. Om den anpassade implementeringen inte hanterar SSL-felet anropas standardbeteendet som ärvs från superklassen. När du använder den här klassen bör du skapa en instans av den och sedan anropa WebView.setWebViewClient(WebViewClient) för att registrera den med en WebView instans.

Här är ett exempel på hur du använder den här klassen.

Exempel med WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

Avslutsvillkor

Se Snabbt testa med ändringsprincip för enkel testning.

Validerar spara till/öppna från begränsningar

Hoppa över om du inte implementerade principen för att begränsa dataöverföringen mellan appar och enheter eller molnlagringsplatser.

Förfina dig själv med varje scenario där din app kan spara data till molntjänster eller lokala data och öppna data från molntjänster eller lokala data.

För enkelhetens skull förutsätter de här testerna att din app endast har stöd för att spara och öppna data från OneDrive för företag från en enda plats i appen. Du måste dock verifiera varje kombination: varje plats för sparande som stöds mot varje plats som appen tillåter att data sparas på, och varje öppen plats som stöds mot varje plats som appen tillåter att data öppnas på.

För dessa tester installerar du din app och Intune-företagsportal. Logga in med ett hanterat konto innan du startar testet. Dessutom:

  • Ange principen för det hanterade kontot som:
    • "Skicka organisationsdata till andra appar" till "Principhanterade appar".
    • "Ta emot data från andra appar" till "Principhanterade appar".
Scenario Förutsättningar Steg
Spara till, helt tillåtet Principen "Spara kopior av organisationsdata" är inställd på "Tillåt" – Gå till platsen där din app kan spara data till OneDrive för företag.
– Försök att spara ett dokument till OneDrive för företag till samma hanterade konto som är inloggad i din app.
– Bekräfta att spara är tillåtet.
Spara till, undantagen – Principen "Spara kopior av organisationsdata" är inställd på "Blockera"
– Principen "Tillåt användare att spara kopior till valda tjänster" är inställd på endast "OneDrive för företag"
– Gå till platsen där din app kan spara data till OneDrive för företag.
– Försök att spara ett dokument till OneDrive för företag till samma hanterade konto som är inloggad i din app.
– Bekräfta att spara är tillåtet.
– Om din app tillåter kan du försöka spara filen på en annan molnlagringsplats och bekräfta att den är blockerad.
Spara till, blockerad Principen "Spara kopior av organisationsdata" är inställd på "Blockera" – Gå till platsen där din app kan spara data till OneDrive för företag.
– Försök att spara ett dokument till OneDrive för företag till samma hanterade konto som är inloggad i din app.
– Bekräfta att spara är blockerat.
– Om din app tillåter kan du försöka spara filen på en annan molnlagringsplats och bekräfta att den är blockerad.
Öppna från, helt tillåtet Principen "Öppna data i organisationsdokument" är inställd på "Tillåt" – Gå till platsen där appen kan öppna data från OneDrive för företag.
– Försök att öppna ett dokument från OneDrive för företag från samma hanterade konto som är loggat in på appens lagring.
– Bekräfta att det är tillåtet att öppna.
Öppna från, undantagen – Principen "Öppna data i organisationsdokument" är inställd på "Blockera"
– Principen "Tillåt användare att öppna data från valda tjänster" är inställd på endast "OneDrive för företag"
– Gå till platsen där appen kan öppna data från OneDrive för företag.
– Försök att öppna ett dokument från OneDrive för företag från samma hanterade konto som är loggat in på appens lagring.
– Bekräfta att det är tillåtet att öppna.
– Om din app tillåter kan du försöka öppna en annan fil från en annan molnlagringsplats och bekräfta att den är blockerad.
Öppna från, blockerad Principen "Öppna data i organisationsdokument" är inställd på "Blockera" – Gå till platsen där appen kan öppna data från OneDrive för företag.
– Försök att öppna ett dokument från OneDrive för företag från samma hanterade konto som är loggat in på appens lagring.
– Bekräfta att öppningen är blockerad.
– Om din app tillåter kan du försöka öppna en annan fil från en annan molnlagringsplats och bekräfta att den är blockerad.

Verifierar aviseringsbegränsningar

Hoppa över om du inte implementerade principen för att begränsa innehåll inuti meddelanden.

När det gäller appskyddsprincipen kan ditt program utlösa tre olika typer av meddelanden:

  1. Meddelanden som inte innehåller några kontodata.
  2. Meddelanden som innehåller data som tillhör ett hanterat konto.
  3. Meddelanden som innehåller data som tillhör ett ohanterat konto.

Om ditt program är en enda identitet är endast de första 2 relevanta, eftersom inga skydd tillämpas om det enda kontot är ohanterat.

Meddelandebegränsningar kan verifieras genom att utlösa alla tre typer av meddelanden med olika principvärden konfigurerade.

För dessa tester installerar du din app och Intune-företagsportal. Logga in med ett hanterat konto innan du startar testet. Om din app har flera identiteter loggar du även in på din app med ett ohanterat konto.

Scenario Förutsättningar Steg
Fullständigt innehåll blockerat Principen "Meddelanden om organisationsdata" är inställd på "Blockera" – Utlös din app för att utlösa ett meddelande utan kontodata.
– Bekräfta att det här meddelandet inte visar något innehåll.
– Utlös din app för att utlösa ett meddelande med det hanterade kontots data.
– Bekräfta att det här meddelandet inte visar något innehåll.
– Utlös din app för att utlösa ett meddelande med det ohanterade kontots data.
– Bekräfta att det här meddelandet inte visar något innehåll.
Partiellt innehåll blockerat Principen "Meddelanden om organisationsdata" är inställd på "Blockera organisationsdata" – Utlös din app för att utlösa ett meddelande utan kontodata.
– Bekräfta att det här meddelandet visar det fullständiga innehållet.
– Utlös din app för att utlösa ett meddelande med det hanterade kontots data.
– Bekräfta att det här meddelandet redigerar det hanterade kontots innehåll.
– Utlös din app för att utlösa ett meddelande med det ohanterade kontots data.
– Bekräfta att det här meddelandet visar det fullständiga innehållet.
Inget innehåll har blockerats Principen "Meddelanden om organisationsdata" är inställd på "Tillåt"

Verifiera säkerhetskopiering och återställning av data

Hoppa över om du inte implementerade principen för att skydda säkerhetskopierade data.

Bekanta dig med innehållet (filer och/eller nyckel/värde-par) som appen har konfigurerat för säkerhetskopiering. Du bör kontrollera att endast förväntat innehåll ingår i återställningen. Extra innehåll i återställningen kan leda till en dataläcka.

För dessa tester installerar du din app och Intune-företagsportal. Logga in med ett hanterat konto innan du startar testet. Om din app har flera identiteter loggar du även in på din app med ett ohanterat konto.

Följ Androids officiella instruktioner för att testa säkerhetskopiering. De här anvisningarna skiljer sig åt för säkerhetskopiering av automatisk säkerhetskopiering och nyckel/värde, så följ noga.

Verifiera anpassad skärmdump mot princip

Hoppa över om du inte implementerade anpassade begränsningar för skärmdumpar.

Om ditt program har en funktion som kringgår Android-nivån WindowFLAG_SECUREkontrollerar du att den här funktionen blockeras av begränsningar för skärmdump av appskyddsprinciper.

För dessa tester installerar du din app och Intune-företagsportal. Logga in med ett hanterat konto innan du startar testet.

Scenario Förutsättningar Steg
Skärmdump blockerad Policyn "Skärmdump och Google Assistant" är inställd på "Blockera" – Navigera till den plats i appen som använder din anpassade FLAG_SECURE kod.
– Försök att använda den funktionen.
– Bekräfta att funktionen är blockerad.
Skärmdump tillåts Policyn "Skärmdump och Google Assistant" är inställd på "Tillåt" – Navigera till den plats i appen som använder din anpassade FLAG_SECURE kod.
– Försök att använda den funktionen.
– Bekräfta att funktionen är tillåten.

Verifiera appskydds-CA

Hoppa över om du inte implementerade Support App Protection CA.

Förutom de vanliga verifieringsstegen för att skapa och tilldela appskyddsprinciper till din app och testkonto, måste du också skapa och tilldela en princip för villkorsstyrd åtkomst för appskydd till ditt testkonto. Mer information finns i Konfigurera appbaserade principer för villkorsstyrd åtkomst med Intune .

Teststeg:

  1. Avinstallera Microsoft Authenticator och Intune-företagsportal innan du startar det här testet.
  2. Installera din app.
  3. Logga in på din app med ditt testkonto som är mål för både appskyddsprincipen och appbaserad CA-princip.
  4. Bekräfta att appen uppmanar dig att installera Företagsportal.
  5. Logga in igen.
  6. Bekräfta att appen uppmanar dig att registrera enheten. Följ anvisningarna. Om appen inte frågar efter registrering här kontrollerar du att testenheten har avinstallerat andra SDK-aktiverade appar, Företagsportal och Authenticator först. Om detta fortfarande inte frågar kan du gå tillbaka till implementeringsinstruktionerna ovan.
  7. Bekräfta att du kan komma åt alla appdata när du har registrerat dig.

Validera meddelandemottagare

Hoppa över om du inte implementerade Registrera för meddelanden från SDK.

Valideringsstegen beror på vilken typ av meddelanden appen har registrerats för. För alla typer av meddelanden lägger du till loggning för att säkerställa att mottagaren anropas korrekt.

MAM_ENROLLMENT_RESULT kan utlösas helt enkelt genom att först logga in på ditt program med ett konto som är mål för appskyddsprincipen.

REFRESH_APP_CONFIGoch REFRESH_POLICY kan utlösas genom att uppdatera respektive App Configuration princip och appskyddsprincip som är riktad mot ditt testkonto och väntar på att SDK:t ska ta emot en uppdaterad princip.

Tips

Se Snabbt testa med ändringsprincip för att påskynda den här processen.

MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATA, meddelanden WIPE_COMPLETED kan alla utlösas genom att en selektiv rensning utfärdas från Microsoft Intune.

Validera anpassade teman

Hoppa över om du inte har implementerat anpassade teman.

Anpassat temastöd kan verifieras genom att kontrollera färgerna i SDK:ets dialogrutor. Den enklaste dialogrutan att kontrollera är MAM-PIN-skärmen.

Förutsättningar:

  • Ange principen för det hanterade kontot som:
    • "PIN-kod för åtkomst" till "Krävs".
  • Installera din app och Intune-företagsportal.

Teststeg:

  1. Starta programmet och logga in med testkontot.
  2. Bekräfta att MAM-PIN-skärmen visas och har tema baserat på det anpassade tema som du angav för SDK:t.

Nästa steg

Om du har följt den här guiden i ordning och har slutfört alla avslutsvillkor ovan, grattis, din app är nu helt integrerad med Intune App SDK och kan tillämpa appskyddsprinciper! Om du hoppade över något av de föregående avsnitten för appdeltagande, steg 5: Flera identiteter och steg 6: App Configuration, och är osäker på om din app ska ha stöd för dessa funktioner, kan du gå tillbaka till Viktiga beslut för SDK-integrering.

Appskydd är nu ett centralt scenario för din app. Fortsätt att referera till den här guiden och tillägget när du fortsätter att utveckla din app.