Utvecklarhandbok för Microsoft Intune App SDK för Android

Med Microsoft Intune App SDK för Android kan du införliva Intune appskyddsprinciper (kallas även 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.

Viktigt

Intune släpper regelbundet uppdateringar av Intune App SDK. Vi rekommenderar att du prenumererar på Intune App SDK-lagringsplatserna för uppdateringar så att du kan införliva uppdateringen i din lanseringscykel för programvaruutveckling och säkerställa att dina appar stöder de senaste inställningarna för appskyddsprinciper.

Planera att vidta obligatoriska Intune App SDK-uppdateringar före varje större OS-version för att säkerställa att din app fortsätter att fungera smidigt eftersom OS-uppdateringar kan orsaka icke-bakåtkompatibla ändringar. Om du inte uppdaterar till den senaste versionen innan en större version av operativsystemet kan du riskera att stöta på en icke-bakåtkompatibel ändring och/eller att du inte kan tillämpa appskyddsprinciper på din app.

Processflöde

Följande diagram innehåller Intune App SDK för Android-processflödet:

Arkitekturdiagram på hög nivå för Microsoft Intune.

Etappmål

Guiden innehåller mer information om arkitekturen för Intune App SDK, information om ovanliga integreringssteg och annat användbart innehåll.

SDK:n i detalj

Klass- och metodersättningar

Med hjälp av byggverktygen försöker Intune App SDK minimera integreringsbördan för Android-utvecklare. Innan byggverktygen skapades behövde utvecklarna utföra alla ersättningar manuellt.

Obs!

Appar måste nu integreras med SDK-byggverktygen, som utför alla dessa ersättningar automatiskt.

Android-basklasser ersätts med sina respektive MAM-motsvarigheter för att möjliggöra Intune hantering. SDK-klasserna finns mellan Android-basklassen och appens egen härledda version av klassen. En appaktivitet kan till exempel få en arvshierarki som ser ut så här: AppSpecificActivity utökar MAMActivity utökar .Activity MAM-lagret filtrerar anrop till systemåtgärder för att sömlöst ge din app en hanterad vy av världen.

Förutom basklasser kan vissa klasser som din app använda utan att härledas från (t.ex. MediaPlayer) också ha nödvändiga MAM-motsvarigheter, och vissa metodanrop måste också ersättas. I tabellen nedan visas många av MAM-ersättningarna.

Basklass för Android Intune App SDK-ersättning
android.app.Aktivitet MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Ansökan MAMApplication
android.app.Dialog MAMDialog MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Fragment MAMFragment
android.app.IntentService MAMIntentService
android.app.LauncherActivity MAMLauncherActivity
android.app.ListActivity MAMListActivity
android.app.ListFragment MAMListFragment
android.app.NativeActivity MAMNativeActivity
android.app.PendingIntent MAMPendingIntent
android.app.Service MAMService
android.app.TabActivity MAMTabActivity
android.app.TaskStackBuilder MAMTaskStackBuilder
android.app.backup.BackupAgent MAMBackupAgent
android.app.backup.BackupAgentHelper MAMBackupAgentHelper
android.app.backup.FileBackupHelper MAMFileBackupHelper
android.app.backup.SharePreferencesBackupHelper MAMSharedPreferencesBackupHelper
android.app.job.JobService MAMJobService
android.content.BroadcastReceiver MAMBroadcastReceiver
android.content.ContentProvider MAMContentProvider
android.os.Binder MAMBinder (Endast nödvändigt om pärmen inte genereras från ett AIDL-gränssnitt (Android Interface Definition Language))
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPopupWindow
android.widget.TextView MAMTextView
android.widget.AutoCompleteTextView MAMAutoCompleteTextView
android.widget.CheckedTextView MAMCheckedTextView
android.widget.EditText MAMEditText
android.inputmethodservice.ExtractEditText MAMExtractEditText
android.widget.MultiAutoCompleteTextView MAMMultiAutoCompleteTextView
android.view.LayoutInflater MAMLayoutInflater
android.view.ViewGroup MAMViewGroup
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

Metoder som har bytt namn

I många fall har en metod som är tillgänglig i Android-klassen markerats som slutgiltig i MAM-ersättningsklassen. I det här fallet tillhandahåller MAM-ersättningsklassen en metod med liknande namn (vanligtvis med suffixet MAM) som du bör åsidosätta i stället. När du till exempel härleder från MAMActivity, i stället för att åsidosätta onCreate() och anropa super.onCreate(), Activity måste åsidosätta onMAMCreate() och anropa super.onMAMCreate(). Java-kompilatorn bör tillämpa de slutliga begränsningarna för att förhindra oavsiktlig åsidosättning av den ursprungliga metoden i stället för MAM-motsvarigheten.

Paketerade systemtjänster

För vissa systemtjänstklasser är det nödvändigt att anropa en statisk metod på en MAM-omslutningsklass i stället för att direkt anropa önskad metod på tjänstinstansen. Ett anrop till getSystemService(ClipboardManager.class).getPrimaryClip() måste till exempel bli ett samtal till MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Återigen gör det nödvändiga byggpluginet automatiskt dessa ersättningar.

Android-klass Intune App SDK-ersättning
android.content.ClipboardManager MAMClipboard
android.content.ContentProviderClient MAMContentProviderClientManagement
android.content.ContentResolver MAMContentResolverManagement
android.content.pm.PackageManager MAMPackageManagement
android.app.DownloadManager MAMDownloadManagement
android.print.PrintManager MAMPrintManagement
android.view.View MAMViewManagement
android.view.DragEvent MAMDragEventManagement
android.view.LayoutInflater MAMLayoutInflaterManagement
android.app.NotificationManager MAMNotificationManagement
android.app.blob.BlobStoreManager MAMBlobStoreManager
android.app.blob.BlobStoreManager.Session MAMBlobStoreManager.Session

Vissa klasser har de flesta av sina metoder radbrutna, till exempel , , , och PackageManager medan andra klasser bara har en eller två metoder radbrutnaDownloadManager, till exempel , PrintManager, ViewNotificationManagerDragEventPrintHelper, , och .NotificationManagerCompatContentResolverContentProviderClientClipboardManager

MDM- och MAM-registrering

Som beskrivs i steg 4 registrering jämfört med registrering registrerar Intune App SDK konton som appen registrerar så att kontot skyddas med en princip. Kontot hanteras när registreringen har slutförts och MAM-principer ska nu tillämpas på det här kontot.

Termen "registrering" kan också referera till den process som initieras av slutanvändaren för att aktivera enhetshantering (MDM). MDM-registreringen är helt skild från registreringen av appskyddsprinciper.

En SDK-integrerad app kan ha ett konto registrerat för appskyddsprincip utan att det kontot har registrerats för enhetshantering. På samma sätt kan en användare ha registrerat en enhet för enhetshantering utan att ha några SDK-integrerade appar med konton registrerade för appskyddsprincip.

När utvecklare och administratörer refererar till registrering syftar de vanligtvis på MDM-registrering, eftersom registrering av appskyddsprinciper i stort sett är osynlig för både utvecklare och slutanvändare. Mer information om MDM-registrering finns i Registrera Android-enheter .

Integreringstips

Förstå företagsportals loggar

Företagsportals loggar innehåller information som Microsoft-tekniker använder för problemundersökningar. Vissa av loggarna kan även vara användbara för utvecklare som integrerar SDK:n.

Framför allt innehåller filen DiagnosticsInfo-scrubbed.log information om vilka appar som hanteras av MAM och information om MAM-policyn i PolicyDB Information avsnittet. Varje hanterad app har en post i avsnittet PolicyDB Information . Du bör leta efter appens paketnamn här för att bekräfta att MAM-principen är korrekt riktad mot din app. Om du inte ser appens paketnamn här betyder det att det konto som är inloggat inte har MAM-principen tillämpad.

Beskrivning av varje MAM-principinställning finns i Inställningar för Android-appskyddsprincip i Microsoft Intune. En beskrivning av hur de här inställningarna visas i företagsportalens loggar finns i Granska klientappskyddsloggar. När MAM-principen inte tillämpas som förväntat rekommenderar vi att du kontrollerar företagsportalens loggar eller diagnostikgränssnittet, kontrollerar att appen hanteras av MAM-principen och bekräftar att principinställningarna har förväntade värden.

Du kan samla in företagsportals loggar på något av följande sätt:

  • Via företagsportalen
    • Öppna appen Företagsportal
    • Välj menyn med tre punkter i det övre högra hörnet
    • Välj Inställningar
    • Under Diagnostikloggar väljer du Spara loggar
    • Följ anvisningarna för att välja utdatakatalog för att spara företagsportalens loggar.
    • Använd adb shell pull kommandot för att hämta loggarna från Android-enheten till den lokala datorn.
  • [Använd Microsoft Edge för Android för att komma åt hanterade apploggar]. Detta visar användargränssnittet för insamling av företagsportals loggar och visning av MAM-diagnostik.
  • Anropa MAMPolicyManager.showDiagnostics(context) för att visa samma användargränssnitt för insamling av företagsportals loggar.

Testa snabbt med ändrad princip

När du utvecklar och testar appens integrering av Intune App SDK kan du ofta ändra inställningarna för appskyddsprincipen för testanvändaren.

Som standard checkar integrerade appar in med Intune-tjänsten för uppdaterad princip var 30: e minut, när de är aktiva. Du kan undvika denna väntan och tvinga fram en incheckning via företagsportalen:

  1. Starta företagsportalen. Du behöver inte logga in.
  2. Välj knappen ... menyikonen.
  3. Välj Inställningar.
  4. Bläddra till inställningen Hanteringsprincip.
  5. Tryck på knappen Synkronisera.

Detta schemalägger omedelbart en incheckning och hämtar en uppdaterad princip som är riktad till din app och ditt konto.

Felsöka AndroidX-migrering

Om du integrerade Intune App SDK innan du använder AndroidX kan du stöta på ett fel som det här när du migrerar till AndroidX:

incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar

Dessa fel kan inträffa eftersom din app refererar till SDK:s äldre supportklasser. MAM-supportklasserna omsluter Android-supportklasser som har flyttats till AndroidX. För att bekämpa sådana fel ersätter du alla MAM-supportklassreferenser med deras AndroidX-motsvarigheter. Detta kan uppnås genom att först ta bort MAM-supportbiblioteksberoenden från dina Gradle-byggfiler. Raderna i fråga ser ut ungefär så här:

implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"

Rätta sedan de resulterande kompileringstidsfelen genom att ersätta alla referenser till MAM-klasser i com.microsoft.intune.mam.client.support.v7 och-paket com.microsoft.intune.mam.client.support.v4 med deras AndroidX-motsvarigheter. Referenser till MAMAppCompatActivity bör till exempel ändras till AndroidX:s AppCompatActivity. Som diskuterats ovan skriver plugin/verktyg för MAM-bygget automatiskt om klasser i AndroidX-biblioteken med lämpliga MAM-motsvarigheter vid kompilering.

Begränsningar och specialfall

Standardregistrering

Ditt program kan alternativt registrera sig för appskyddsprinciper via en förenklad process som kallas standardregistrering. Den här funktionen är främst till för att stödja privata verksamhetsspecifika appar som inte har integrerat MSAL.

Varning

Standardregistrering har betydande kompromisser och rekommenderas inte. Appar som utnyttjar standardregistrering stöder inte villkorlig åtkomst, drar inte nytta av enkel inloggning med Microsoft-tjänster och kan inte användas av konton som inte är Intune konton. Om din app levereras till en offentlig appbutik stöds inte standardregistrering.

Standardregistrering tvingar slutanvändaren att installera företagsportalen och slutföra ett MAM-registreringsflöde innan användare tillåts i programmet.

Obs!

Standardregistreringen är molnmedveten i en suverän region.

Aktivera standardregistrering med följande steg:

  1. Om din app integrerar MSAL eller om du behöver aktivera enkel inloggning konfigurerar du MSAL. Om inte, kan du hoppa över det här steget.

  2. Aktivera standardregistrering genom att lägga till följande värde i manifestet under taggen <application> :

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Aktivera MAM-princip som krävs genom att lägga till följande värde i manifestet under taggen <application> :

    <meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
    

Isolerade processer

Intune App SDK kan inte tillämpa skydd på isolerade processer. Stöd för isolerade processer (android:isolatedProcess) kräver tillägg av taggen för metadata nedan.

Varning

Genom att lägga till dessa metadata deklarerar programmet att den isolerade processen inte kan exponera organisationsdata. Din ansökan ansvarar för att garantera detta.

<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />

Anpassade begränsningar för Notera på skärmen

Om din app innehåller en anpassad skärmbildsfunktion som kringgår Androids Windownivåbegränsning FLAG_SECURE måste du kontrollera skärmbildsprincipen innan du tillåter fullständig åtkomst till funktionen. Om din app till exempel använder en anpassad återgivningsmotor för att återge den aktuella vyn i en PNG-fil måste du först markera AppPolicy.getIsScreenCaptureAllowed().

Om appen inte innehåller några anpassade skärmbildsfunktioner eller skärmbildsfunktioner från tredje part behöver du inte vidta någon åtgärd för att begränsa skärmbilder. Skärmbildsprincipen tillämpas automatiskt på nivån Window för alla MAM-integrerade appar.

Alla försök från operativsystemet eller någon annan app att fånga in en Window i din app kommer att blockeras vid behov. Om en användare till exempel försöker avbilda appens skärm via Androids inbyggda skärmbilds- eller skärminspelningsfunktioner begränsas klippet automatiskt utan deltagande från din app.

Begränsningar i principtillämpning

  • Använda innehållslösare: Intune-principen "överföring eller mottagning" kan blockera eller delvis blockera användningen av en innehållslösare för åtkomst till innehållsleverantören i en annan app. Det gör ContentResolver att metoderna returnerar null eller genererar ett felvärde (t.ex openOutputStream . utlöses FileNotFoundException om det blockeras). Appen kan avgöra om ett fel med att skriva data via en innehållsmatchare orsakades av en princip (eller skulle orsakas av en princip) genom att göra anropet:

    MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
    

    eller om det inte finns någon associerad aktivitet:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    I det här andra fallet måste appar med flera identiteter vara noga med att ange trådidentiteten på rätt sätt (eller skicka en explicit identitet till ett getPolicyForIdentity anrop).

Exporterade tjänster

Den AndroidManifest.xml filen som ingår i Intune App SDK innehåller MAMNotificationReceiverService, som måste vara en exporterad tjänst för att Företagsportal ska kunna skicka meddelanden till en hanterad app. Tjänsten kontrollerar uppringaren för att säkerställa att endast företagsportalen får skicka meddelanden.

Begränsningar för reflektion

Några av MAM-basklasserna (till exempel MAMActivityMAMDocumentsProvider) innehåller metoder (baserade på de ursprungliga Android-basklasserna) som använder parameter- eller returtyper som bara finns över vissa API-nivåer. Därför kanske det inte alltid är möjligt att använda reflektion för att räkna upp alla metoder för appkomponenter. Den här begränsningen är inte begränsad till MAM, det är samma begränsning som skulle gälla om appen själv implementerade dessa metoder från Android-basklasserna.

Robolectric

Testning av Intune App SDK-beteende under Robolectric stöds inte. Det finns kända problem med att köra SDK:n under Robolectric på grund av beteenden som finns under Robolectric som inte exakt efterliknar dem på verkliga enheter eller emulatorer.

Om du behöver testa ditt program under Robolectric är den rekommenderade lösningen att flytta programklasslogiken till en hjälpare och skapa din enhetstestnings-apk med en programklass som inte ärver från MAMApplication.