Microsoft Intune App SDK voor Android Handleiding voor ontwikkelaars

Met de Microsoft Intune App SDK voor Android kunt u beveiligingsbeleid voor de Intune-app (ook wel MAM-beleid genoemd) opnemen in uw eigen Android-app Java/Kotlin. Een door Intune beheerde toepassing is een toepassing die is geïntegreerd met de Intune App SDK. Intune-beheerders kunnen eenvoudig beveiligingsbeleid voor apps implementeren in uw door Intune beheerde app wanneer de app actief wordt beheerd door Intune.

Belangrijk

Intune brengt regelmatig updates uit voor de Intune App SDK. We raden u aan een abonnement te nemen op de Intune App SDK-opslagplaatsen voor updates, zodat u de update kunt opnemen in de releasecyclus voor softwareontwikkeling en ervoor kunt zorgen dat uw apps de meest recente instellingen voor het app-beveiligingsbeleid ondersteunen.

Plan om verplichte Intune App SDK-updates uit te voeren voorafgaand aan elke belangrijke release van het besturingssysteem om ervoor te zorgen dat je app soepel blijft werken omdat updates van het besturingssysteem belangrijke wijzigingen kunnen veroorzaken. Als u vóór een primaire release van het besturingssysteem niet naar de nieuwste versie bijwerkt, loopt u het risico dat u een belangrijke wijziging ondervindt en/of dat u geen beveiligingsbeleid voor apps op uw app kunt toepassen.

Processtroom

Het volgende diagram bevat de Intune App SDK voor Android-processtroom:

Architectonisch diagram op hoog niveau voor Microsoft Intune.

Fase doelen

Deze handleiding bevat meer informatie over de architectuur van de Intune App SDK, informatie over ongebruikelijke integratiestappen en andere nuttige inhoud.

De SDK in meer detail

Klasse- en methodevervangingen

Door middel van de bouwhulpmiddelen probeert de Intune App SDK de integratielast van Android-ontwikkelaars te minimaliseren. Voorafgaand aan de bouwhulpprogramma's moesten ontwikkelaars alle vervangingen handmatig uitvoeren.

Opmerking

Apps moeten nu worden geïntegreerd met de SDK-buildtooling, die al deze vervangingen automatisch uitvoert.

Android-basisklassen worden vervangen door hun respectieve MAM-equivalenten om Intune-beheer mogelijk te maken. De SDK-klassen staan tussen de Android-basisklasse en de eigen afgeleide versie van die klasse van de app. Een app-activiteit kan bijvoorbeeld leiden tot een hiërarchie voor overname die er als volgt uitziet: AppSpecificActivity extends MAMActivity extends Activity. De MAM-laag filtert aanroepen naar systeembewerkingen om uw app naadloos te voorzien van een beheerde weergave van de wereld.

Naast de basisklassen hebben sommige klassen die uw app kan gebruiken zonder af te leiden van (bijv. MediaPlayer) ook vereiste MAM-equivalenten, en sommige methodeaanroepen moeten ook worden vervangen. De onderstaande tabel bevat veel van de MAM-vervangers.

Android-basisklasse Intune Vervanging van de app-SDK
android.app.Activity MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActiviteit
android.app.Application MAMApplicatie
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 (alleen nodig als de bindmap niet is gegenereerd op basis van een AIDL-interface (Android Interface Definition Language)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMedia-recorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPop-upvenster
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 MAMViewGroep
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

Methoden met een gewijzigde naam

In veel gevallen is een methode die beschikbaar is in de Android-klasse als Definitief gemarkeerd in de MAM-vervangingsklasse. In dit geval biedt de vervangingsklasse MAM een methode met dezelfde naam (meestal achtervoegsel ) MAMdie u in plaats daarvan moet negeren. Bijvoorbeeld, bij het afleiden van MAMActiviteit, in plaats van overschrijven onCreate() en aanroepen super.onCreate(), Activity moet overschrijven onMAMCreate() en aanroepen super.onMAMCreate(). De Java-compiler moet de definitieve beperkingen afdwingen om te voorkomen dat de oorspronkelijke methode in plaats van het MAM-equivalent per ongeluk wordt overschreven.

Wrapped systeemservices

Voor sommige systeemserviceklassen is het noodzakelijk om een statische methode aan te roepen voor een MAM-wrapperklasse in plaats van de gewenste methode rechtstreeks aan te roepen op het service-exemplaar. Een aanroep om moet bijvoorbeeld een aanroep naar getSystemService(ClipboardManager.class).getPrimaryClip()MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)worden. Nogmaals, de vereiste build-plug-in voert deze vervangingen automatisch uit.

Android-klasse Intune Vervanging van de app-SDK
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

Sommige klassen hebben de meeste van hun methoden ingepakt, bijvoorbeeld ClipboardManager, , , ContentResolver, en PackageManager terwijl andere klassen slechts een of twee methoden hebben ingepakt, bijvoorbeeld DownloadManager, PrintManager, , PrintHelper, View, DragEventNotificationManager , en NotificationManagerCompatContentProviderClient.

MDM- en MAM-inschrijving

Zoals besproken in Registratie versus inschrijving van fase 4, zal de Intune App SDK accounts "registreren" die uw app registreert, zodat dat account wordt beveiligd met beleid. Het account wordt beheerd nadat deze inschrijving is geslaagd en MAM-beleid moet nu op dit account worden toegepast.

De term 'inschrijving' kan ook verwijzen naar het door de eindgebruiker geïnitieerde proces voor het inschakelen van Apparaatbeheer (MDM). MDM-inschrijving staat volledig los van inschrijving voor app-beveiligingsbeleid.

Een met SDK geïntegreerde app kan een account hebben dat is ingeschreven voor App-beveiligingsbeleid zonder dat dat account is ingeschreven voor Apparaatbeheer. Op dezelfde manier kan een gebruiker een apparaat hebben ingeschreven voor Apparaatbeheer zonder SDK-geïntegreerde apps met accounts die zijn ingeschreven voor App-beveiligingsbeleid.

Wanneer ontwikkelaars en beheerders het over inschrijving hebben, bedoelen ze doorgaans MDM-inschrijving, aangezien inschrijving van het App Protection Policy grotendeels onzichtbaar is voor zowel ontwikkelaars als eindgebruikers. Zie Android-apparaten inschrijven voor meer informatie over MDM-inschrijving.

Tips voor integratie

Informatie over logboeken in de Bedrijfsportal

Logboeken in de Bedrijfsportal bevatten informatie die Microsoft-technici gebruiken voor probleemonderzoeken. Sommige logboeken kunnen ook handig zijn voor ontwikkelaars die de SDK integreren.

Het bestand DiagnosticsInfo-scrubbed.log bevat met name informatie over welke apps worden beheerd door MAM en de details van het MAM-beleid in de PolicyDB Information sectie. Elke beheerde app heeft een vermelding in de PolicyDB Information sectie. Zoek hier naar de pakketnaam van uw app om te bevestigen dat het MAM-beleid correct op uw app is gericht. Als u de pakketnaam van uw app hier niet ziet, betekent dit dat er geen MAM-beleid is toegepast op het account dat is aangemeld.

Raadpleeg voor een beschrijving van elke MAM-beleidsinstelling de instellingen voor het beveiligingsbeleid voor Android-apps in Microsoft Intune. Voor een beschrijving van hoe deze instellingen worden weergegeven in de logboeken van de Bedrijfsportal, raadpleegt u Beveiligingslogboeken voor client-apps bekijken. Als het MAM-beleid niet zoals verwacht wordt afgedwongen, raden we u aan de logboeken in de Bedrijfsportal of de diagnostische gebruikersinterface te controleren, te controleren of uw app wordt beheerd door MAM-beleid en te controleren of de beleidsinstellingen verwachte waarden hebben.

U kunt logboeken in de Bedrijfsportal op een van de volgende manieren verzamelen:

  • Via de Bedrijfsportal
    • De app Bedrijfsportal openen
    • Selecteer het menu met drie puntjes in de rechterbovenhoek
    • Selecteer Instellingen
    • Selecteer onder Diagnostische logboeken de optie Logboeken opslaan
    • Volg de aanwijzing om de uitvoermap te kiezen voor het opslaan van de logboeken in de Bedrijfsportal.
    • Gebruik adb shell pull de opdracht om de logboeken van uw Android-apparaat naar uw lokale computer te halen.
  • [Gebruik Microsoft Edge voor Android voor toegang tot beheerde app-logboeken]. Hiermee wordt de gebruikersinterface weergegeven voor het verzamelen van logboeken in de Bedrijfsportal en het bekijken van MAM-diagnoses.
  • Aanroepen MAMPolicyManager.showDiagnostics(context) om dezelfde gebruikersinterface weer te geven voor het verzamelen van logboeken in de Bedrijfsportal.

Snel testen met veranderend beleid

Tijdens het ontwikkelen en testen van de integratie van uw app met de Intune App SDK, moet u de instellingen voor het app-beveiligingsbeleid voor de testgebruiker regelmatig wijzigen.

Standaard controleren geïntegreerde apps elke 30 minuten bij de Intune-service op bijgewerkt beleid wanneer deze actief zijn. U kunt dit wachten vermijden en inchecken afdwingen via de Bedrijfsportal:

  1. Start de Bedrijfsportal. U hoeft zich niet aan te melden.
  2. Selecteer de ... Menupictogram.
  3. Selecteer Instellingen.
  4. Scroll naar de instelling met de naam 'Beheerbeleid'.
  5. Druk op de knop Synchroniseren.

Hiermee wordt direct een check-in gepland en wordt up-to-date beleid opgehaald dat is gericht op uw app en account.

Problemen met AndroidX-migratie oplossen

Als u de Intune App SDK hebt geïntegreerd voordat u AndroidX gebruikte, kan een fout zoals deze optreden tijdens de migratie naar AndroidX:

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

Deze fouten kunnen optreden omdat uw app verwijst naar de oudere ondersteuningsklassen van de SDK. De MAM-ondersteuningsklassen zijn afgestemd op Android-ondersteuningsklassen die in AndroidX zijn verplaatst. Vervang alle verwijzingen naar MAM-ondersteuningsklassen door hun AndroidX-equivalenten om dergelijke fouten tegen te gaan. U kunt dit bereiken door eerst de afhankelijkheden van de MAM-ondersteuningsbibliotheek uit uw Gradle-buildbestanden te verwijderen. De regels in kwestie zien er ongeveer als volgt uit:

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

Los vervolgens de resulterende compileertijdfouten op door alle verwijzingen naar MAM-klassen in de com.microsoft.intune.mam.client.support.v7 and-pakketten com.microsoft.intune.mam.client.support.v4 te vervangen door hun AndroidX-equivalenten. Verwijzingen naar MAMAppCompatActivity moeten bijvoorbeeld worden gewijzigd in het AppCompatActivity. Zoals hierboven besproken, zal de MAM-buildplug-in/tool automatisch klassen in de AndroidX-bibliotheken herschrijven met de juiste MAM-equivalenten tijdens het compileren.

Beperkingen en speciale gevallen

Standaardinschrijving

U kunt zich ook registreren voor app-beveiligingsbeleid via een vereenvoudigd proces dat standaardinschrijving wordt genoemd. Deze functie is voornamelijk bedoeld ter ondersteuning van persoonlijke line-of-business-apps die niet met MSAL zijn geïntegreerd.

Waarschuwing

Standaardinschrijving brengt aanzienlijke compromissen met zich mee en wordt niet aanbevolen. Apps die gebruikmaken van standaardinschrijving bieden geen ondersteuning voor voorwaardelijke toegang, profiteren niet van eenmalige aanmelding met Microsoft-services en kunnen niet worden gebruikt door niet-Intune-accounts. Als uw app wordt verzonden naar een openbare App Store, wordt standaardregistratie niet ondersteund.

Door een standaardinschrijving moet de eindgebruiker de Bedrijfsportal installeren en een MAM-inschrijvingsprocedure voltooien voordat gebruikers toegang krijgen tot uw toepassing.

Opmerking

Standaardinschrijving is soeverein cloudbewust.

Schakel standaardinschrijving in met de volgende stappen:

  1. Als uw app MSAL integreert of als u eenmalige aanmelding moet inschakelen, configureert u MSAL. Als dit niet het geval is, kunt u deze stap overslaan.

  2. Schakel standaardinschrijving in door de volgende waarde in het manifest onder de <application> tag toe te voegen:

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Schakel het MAM-beleid in door de volgende waarde in het manifest onder de <application> code toe te voegen:

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

Geïsoleerde processen

De Intune App SDK kan geen beveiligingen toepassen op geïsoleerde processen. Voor ondersteuning van geïsoleerde processen (android:isolatedProcess) moet u het onderstaande metagegevenslabel toevoegen.

Waarschuwing

Door deze metagegevens toe te voegen, geeft uw toepassing aan dat het geïsoleerde proces geen organisatiegegevens beschikbaar kan stellen. Uw applicatie is verantwoordelijk om dit te garanderen.

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

Beperkingen voor aangepaste Noteren van het scherm

Als uw app een aangepaste schermopnamefunctie bevat die de beperking op WindowAndroid-niveau FLAG_SECURE omzeilt, moet u het beleid voor schermopname controleren voordat u volledige toegang tot de functie toestaat. Als uw app bijvoorbeeld een aangepaste rendering-engine gebruikt om de huidige weergave te converteren naar een PNG-bestand, moet u eerst controleren AppPolicy.getIsScreenCaptureAllowed().

Als uw app geen aangepaste functies of schermopnamefuncties van derden bevat, hoeft u geen actie te ondernemen om schermopnamen te beperken. Beleid voor schermopname wordt automatisch afgedwongen op het Window niveau voor alle geïntegreerde MAM-apps.

Alle pogingen van het besturingssysteem of een andere app om een Window in uw app vast te leggen, worden indien nodig geblokkeerd. Als een gebruiker bijvoorbeeld probeert het scherm van uw app vast te leggen via de ingebouwde schermopname- of schermopnamefuncties van Android, wordt de opname automatisch beperkt zonder deelname van uw app.

Beperkingen voor het afdwingen van beleid

  • Inhoudsresolvers gebruiken: het Intune-beleid 'overbrengen of ontvangen' van Intune kan het gebruik van een inhoudsresolver voor toegang tot de inhoudsprovider in een andere app blokkeren of gedeeltelijk blokkeren. Dit zorgt ervoor dat ContentResolver methoden null retourneren of een foutwaarde genereren (bijvoorbeeld openOutputStream genereren FileNotFoundException als ze worden geblokkeerd). De app kan bepalen of het wegschrijven van gegevens via een inhoudsresolver werd veroorzaakt door beleid (of zou worden veroorzaakt door beleid) door de volgende aanroep uit te voeren:

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

    of als er geen bijbehorende activiteit is:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    In dit tweede geval moeten apps met meerdere identiteiten ervoor zorgen dat de thread-identiteit op de juiste manier wordt ingesteld (of een expliciete identiteit doorgeven aan een getPolicyForIdentity oproep).

Geëxporteerde services

Het AndroidManifest.xml bestand dat is opgenomen in de Intune App SDK bevat MAMNotificationReceiverService. Dit moet een geëxporteerde service zijn zodat de Bedrijfsportal meldingen naar een beheerde app kan verzenden. De service controleert de beller om ervoor te zorgen dat alleen de Bedrijfsportal meldingen mag verzenden.

Reflectie beperkingen

Sommige MAM-basisklassen (bijvoorbeeld MAMActivity, MAMDocumentsProvider) bevatten methoden (gebaseerd op de oorspronkelijke Android-basisklassen) die parameter- of retourtypen gebruiken die alleen aanwezig zijn boven bepaalde API-niveaus. Daarom is het niet altijd mogelijk om reflectie te gebruiken om alle methoden van app-onderdelen op te sommen. Deze beperking is niet beperkt tot MAM, het is dezelfde beperking die van toepassing zou zijn als de app zelf deze methoden uit de Android-basisklassen zou implementeren.

Robolectric

Het testen van Intune App-SDK-gedrag onder Robolectric wordt niet ondersteund. Er zijn bekende problemen bij het uitvoeren van de SDK onder Robolectric vanwege gedrag onder Robolectric dat niet nauwkeurig overeenkomt met dat op echte apparaten of emulators.

Als u uw toepassing onder Robolectric moet testen, is de aanbevolen oplossing om de logica van uw toepassingsklasse naar een helper te verplaatsen en uw apk voor het testen van eenheden te produceren met een toepassingsklasse die niet erft van MAMApplication.