Dela via


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

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.

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 programutvecklingscykeln och se till att dina appar stöder de senaste appskyddsprincipinställningarna.

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

Processflöde

Följande diagram innehåller Processflöde för Intune App SDK för Android:

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

Etappmål

Guiden innehåller mer information om Intune App SDK:s arkitektur, information om ovanliga integreringssteg och annat användbart innehåll.

SDK:et i detalj

Klass- och metodbyten

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

Obs!

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

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

Förutom basklasser kan vissa klasser som appen kan 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 mam-ersättningar.

Android-basklass Intune App SDK-ersättning
android.app.Activity MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Application MAMApplication
android.app.Dialog 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 (krävs endast om Binder 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 suffixet med 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 onCreate() åsidosätta 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.

Omslutna systemtjänster

För vissa systemtjänstklasser är det nödvändigt att anropa en statisk metod i en MAM-omslutningsklass i stället för att direkt anropa önskad metod på tjänstinstansen. Till exempel måste ett anrop till getSystemService(ClipboardManager.class).getPrimaryClip() bli ett anrop till MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Återigen gör det nödvändiga build-plugin-programmet 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 omslutna, ClipboardManagertill exempel , ContentProviderClient, ContentResolveroch PackageManager medan andra klasser bara har en eller två metoder omslutna, DownloadManagertill exempel , PrintManager, PrintHelper, View, DragEventoch NotificationManagerNotificationManagerCompat.

MDM- och MAM-registrering

Som beskrivs i steg 4: s registrering kontra registrering kommer Intune App SDK att "registrera" konton som din app registrerar så att kontot skyddas med principen. Kontot hanteras när registreringen har slutförts och MAM-principer bör nu tillämpas på det här kontot.

Termen "registrering" kan också referera till den slutanvändarinitierade processen för att aktivera enhetshantering (MDM). MDM-registreringen är helt separat från registrering av appskyddsprinciper.

En SDK-integrerad app kan ha ett konto registrerat för appskyddsprincipen utan att 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 som registrerats för appskyddsprincipen.

När utvecklare och administratörer refererar till registrering refererar de vanligtvis till 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öretagsportalloggar

Företagsportalloggar innehåller information som Microsoft-tekniker använder för problemundersökningar. Vissa av loggarna kan också vara användbara för utvecklare som integrerar SDK.

I synnerhet innehåller filen DiagnosticsInfo-scrubbed.log information om vilka appar som hanteras av MAM och MAM-principinformationen PolicyDB Information i 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 anger det att det konto som loggas in inte har en MAM-princip tillämpad.

Beskrivning av varje MAM-principinställning finns i Inställningar för Android-appskyddsprinciper i Microsoft Intune. En beskrivning av hur de här inställningarna visas i företagsportalloggarna finns i Granska klientappskyddsloggar. När MAM-principen inte tillämpas som förväntat rekommenderar vi att du kontrollerar företagsportalloggarna 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öretagsportalloggar på något av följande sätt:

  • Via företagsportalen
    • Öppna företagsportalappen
    • Välj menyn med tre punkter i det högra hörnet
    • Välj inställningar
    • Under Diagnostikloggar väljer du Spara loggar
    • Följ anvisningarna för att välja utdatakatalogen för att spara företagsportalloggarna.
    • Använd adb shell pull kommandot för att hämta loggarna från din Android-enhet till den lokala datorn.
  • [Använd Microsoft Edge för Android för att komma åt loggar för hanterade appar]. Då visas användargränssnittet för att samla in företagsportalloggar och visa MAM-diagnostik.
  • Anropa MAMPolicyManager.showDiagnostics(context) för att visa samma användargränssnitt för insamling av företagsportalloggar.

Testa snabbt med ändringsprincip

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

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

  1. Starta företagsportalen. Du behöver inte logga in.
  2. Välj ... menyikon.
  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 har integrerat Intune App SDK innan du använder AndroidX kan det uppstå ett fel som detta 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-stödklasserna omsluter Android-supportklasser som har flyttats i AndroidX. Om du vill bekämpa sådana fel ersätter du alla MAM-stödklassreferenser med deras AndroidX-motsvarigheter. Detta kan uppnås genom att först ta bort MAM-stödbiblioteksberoenden 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"

Åtgärda sedan de resulterande kompileringsfelen genom att ersätta alla referenser till MAM-klasser i paketen com.microsoft.intune.mam.client.support.v7 och com.microsoft.intune.mam.client.support.v4 med deras AndroidX-motsvarigheter. Referenser till bör till MAMAppCompatActivity exempel ändras till AndroidX AppCompatActivity. Som vi nämnt ovan skriver MAM-kompilerings-plugin-programmet 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 genom 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

Standardregistreringen medför betydande kompromisser och rekommenderas inte. Appar som använder standardregistrering stöder inte villkorsstyrd åtkomst, drar inte nytta av enkel inloggning med Microsoft-tjänster och kan inte användas av icke-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 ditt program.

Obs!

Standardregistreringen är molnmedveten.

Aktivera standardregistrering med följande steg:

  1. Om din app integrerar MSAL eller om du behöver aktivera enkel inloggning konfigurerar du MSAL. Annars 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-principen 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 metadatataggen nedan.

Varning

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

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

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().

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.

Begränsningar för principframtvingande

  • Använda innehållsmatchare: Intune-principen "överföra eller ta emot" kan blockera eller delvis blockera användningen av en innehållsmatchare för att få åtkomst till innehållsleverantören i en annan app. Detta gör ContentResolver att metoder returnerar null eller utlöser ett felvärde (till exempel 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 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 fil som ingår i Intune App SDK innehåller MAMNotificationReceiverService, som måste vara en exporterad tjänst för att företagsportalen ska kunna skicka meddelanden till en hanterad app. Tjänsten kontrollerar anroparen för att säkerställa att endast företagsportalen får skicka meddelanden.

Reflektionsbegränsningar

Några av MAM-basklasserna (till exempel MAMActivity, MAMDocumentsProvider) innehåller metoder (baserat på de ursprungliga Android-basklasserna) som använder parameter- eller returtyper som bara finns ovanför 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 gäller om själva appen implementerade dessa metoder från Android-basklasserna.

Robolectric

Det går inte att testa Beteendet för Intune App SDK under Robolectric. Det finns kända problem med att köra SDK:n under Robolectric på grund av beteenden som finns under Robolectric och 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älpkomponent och skapa apk:en för enhetstestning med en programklass som inte ärver från MAMApplication.