Ontwikkelaarshandleiding voor Microsoft Intune App SDK voor Android
Met de Microsoft Intune App SDK voor Android kunt u intune-app-beveiligingsbeleid (ook wel APP - of MAM-beleid genoemd) opnemen in uw systeemeigen Java/Kotlin Android-app. Een door Intune beheerde toepassing is een toepassing die is geïntegreerd met de Intune App SDK. Intune-beheerders kunnen eenvoudig app-beveiligingsbeleid implementeren in uw door Intune beheerde app wanneer Intune de app actief beheert.
Belangrijk
Intune brengt regelmatig updates uit voor de Intune App SDK. U wordt aangeraden u te abonneren 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 nieuwste instellingen voor app-beveiligingsbeleid ondersteunen.
Plan verplichte Intune App SDK-updates voorafgaand aan elke belangrijke release van het besturingssysteem om ervoor te zorgen dat uw app soepel blijft werken omdat updates van het besturingssysteem wijzigingen kunnen veroorzaken. Als u niet bijwerkt naar de nieuwste versie voorafgaand aan een belangrijke release van het besturingssysteem, loopt u mogelijk het risico dat er een wijziging optreedt die fouten veroorzaakt en/of dat u geen app-beveiligingsbeleid kunt toepassen op uw app.
Processtroom
Het volgende diagram bevat de intune App SDK voor Android-processtroom:
Fasedoelen
De 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
Vervangingen voor klassen en methoden
Met behulp van de buildhulpprogramma's probeert de Intune App SDK de integratielast van Android-ontwikkelaars te minimaliseren. Vóór de buildhulpprogramma's moesten ontwikkelaars alle vervangingen handmatig uitvoeren.
Opmerking
Apps moeten nu worden geïntegreerd met de SDK-buildhulpprogramma's, waarmee al deze vervangingen automatisch worden uitgevoerd.
Android-basisklassen worden vervangen door hun respectieve MAM-equivalenten om Intune-beheer mogelijk te maken.
De SDK-klassen zijn live tussen de Android-basisklasse en de eigen afgeleide versie van die klasse van de app.
Een app-activiteit kan bijvoorbeeld eindigen met een overnamehiërarchie die eruitziet als: AppSpecificActivity
uitbreidingen MAMActivity
breidt uit Activity
.
De MAM-laag filtert aanroepen naar systeembewerkingen om uw app naadloos een beheerd beeld van de wereld te bieden.
Naast basisklassen hebben sommige klassen die uw app mogelijk gebruikt zonder te zijn afgeleid van (bijvoorbeeld MediaPlayer
) ook vereiste MAM-equivalenten en moeten sommige methodeaanroepen ook worden vervangen.
In de onderstaande tabel worden veel van de MAM-vervangingen vermeld.
Android-basisklasse | Intune App SDK vervangen |
---|---|
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 (alleen nodig als de Binder niet wordt gegenereerd op basis van een INTERFACE Definition Language (AIDL)-interface voor Android) |
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 |
Hernoemde methoden
In veel gevallen is een methode die beschikbaar is in de Android-klasse gemarkeerd als definitief in de MAM-vervangingsklasse.
In dit geval biedt de MAM-vervangingsklasse een methode met dezelfde naam (meestal achtervoegsel met MAM
) die u in plaats daarvan moet overschrijven.
Wanneer bijvoorbeeld wordt afgeleid van MAMActivity, in plaats van te onCreate()
overschrijven en aan te roepen super.onCreate()
, Activity
moet u overschrijven onMAMCreate()
en aanroepen super.onMAMCreate()
.
De Java-compiler moet de definitieve beperkingen afdwingen om onbedoelde onderdrukking van de oorspronkelijke methode in plaats van het MAM-equivalent te voorkomen.
Verpakte systeemservices
Voor sommige systeemserviceklassen is het nodig om een statische methode aan te roepen op een MAM-wrapperklasse in plaats van de gewenste methode rechtstreeks aan te roepen op het service-exemplaar.
Een aanroep naar getSystemService(ClipboardManager.class).getPrimaryClip()
moet bijvoorbeeld een aanroep worden van MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)
.
Nogmaals, de vereiste build-invoegtoepassing maakt deze vervangingen automatisch.
Android-klasse | Intune App SDK vervangen |
---|---|
android.content.KlembordManager | 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 methoden verpakt, ClipboardManager
bijvoorbeeld , ContentProviderClient
, ContentResolver
en, terwijl PackageManager
andere klassen slechts één of twee methoden hebben verpakt, DownloadManager
bijvoorbeeld , PrintManager
, PrintHelper
, View
, DragEvent
, en NotificationManager
NotificationManagerCompat
.
MDM- en MAM-inschrijving
Zoals beschreven in Registratie versus inschrijving van fase 4, worden accounts die door uw app worden geregistreerd met de Intune App SDK ingeschreven, zodat het account wordt beveiligd met beleid. Het account wordt beheerd nadat deze inschrijving is geslaagd en mam-beleid moet nu worden toegepast op dit account.
De term 'inschrijving' kan ook verwijzen naar het door de eindgebruiker geïnitieerde proces voor het inschakelen van Device Management (MDM). MDM-inschrijving staat volledig los van inschrijving van app-beveiligingsbeleid.
Een met SDK geïntegreerde app kan een account hebben dat is ingeschreven voor app-beveiligingsbeleid zonder dat dat account wordt ingeschreven voor Apparaatbeheer. Op dezelfde manier kan een gebruiker een apparaat hebben ingeschreven voor Apparaatbeheer zonder dat er sdk-geïntegreerde apps zijn met accounts die zijn ingeschreven voor app-beveiligingsbeleid.
Wanneer ontwikkelaars en beheerders naar inschrijving verwijzen, verwijzen ze doorgaans naar MDM-inschrijving, omdat inschrijving van app-beveiligingsbeleid grotendeels onzichtbaar is voor zowel ontwikkelaars als eindgebruikers. Zie Android-apparaten inschrijven voor meer informatie over MDM-inschrijving.
Integratietips
Informatie over bedrijfsportallogboeken
Bedrijfsportallogboeken bevatten informatie die Microsoft-technici gebruiken voor het onderzoeken van problemen. 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 MAM-beleid juist is gericht op uw app.
Als u de pakketnaam van uw app hier niet ziet, geeft dit aan dat er geen MAM-beleid is toegepast op het account dat is aangemeld.
Zie Beveiligingsbeleidsinstellingen voor Android-apps in Microsoft Intune voor een beschrijving van elke MAM-beleidsinstelling. Zie Logboeken voor client-app-beveiliging controleren voor een beschrijving van hoe deze instellingen worden weergegeven in de bedrijfsportallogboeken. Wanneer MAM-beleid niet wordt afgedwongen zoals verwacht, raden we u aan bedrijfsportallogboeken of de diagnostische gebruikersinterface te controleren, te controleren of uw app wordt beheerd door MAM-beleid en te bevestigen dat de beleidsinstellingen verwachte waarden hebben.
U kunt bedrijfsportallogboeken op een van de volgende manieren verzamelen:
- Via de bedrijfsportal
- De bedrijfsportal-app openen
- Selecteer het menu met drie puntjes in de rechterbovenhoek
- Instellingen selecteren
- Selecteer onder Diagnostische logboeken de optie Logboeken opslaan
- Volg de prompt om de uitvoermap te kiezen om de bedrijfsportallogboeken op te slaan.
- Gebruik
adb shell pull
de opdracht om de logboeken van uw Android-apparaat naar uw lokale computer op te halen.
- [Microsoft Edge voor Android gebruiken voor toegang tot beheerde app-logboeken]. Hiermee wordt de gebruikersinterface weergegeven voor het verzamelen van bedrijfsportallogboeken en het weergeven van MAM-diagnostische gegevens.
- Roep
MAMPolicyManager.showDiagnostics(context)
aan om dezelfde gebruikersinterface weer te geven voor het verzamelen van bedrijfsportallogboeken.
Snel testen met wijzigend beleid
Tijdens het ontwikkelen en testen van de integratie van de Intune App SDK van uw app, kunt u de instellingen voor app-beveiligingsbeleid voor uw testgebruiker regelmatig wijzigen.
Standaard worden geïntegreerde apps elke 30 minuten bij de Intune-service ingecheckt voor bijgewerkte beleidsregels, wanneer ze actief zijn. U kunt deze wachttijd voorkomen en het inchecken afdwingen via de bedrijfsportal:
- Start de bedrijfsportal. U hoeft zich niet aan te melden.
- Selecteer de ... menupictogram.
- Selecteer Instellingen.
- Schuif naar de instelling 'Beheerbeleid'.
- Druk op de knop Synchroniseren.
Hiermee wordt onmiddellijk een check-in gepland en wordt het 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 gebruikt, kan er een dergelijke fout 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 verouderde ondersteuningsklassen van de SDK. De MAM-ondersteuningsklassen verpakken Android-ondersteuningsklassen die zijn verplaatst naar AndroidX. Als u dergelijke fouten wilt bestrijden, vervangt u alle MAM-ondersteuningsklasseverwijzingen door hun AndroidX-equivalenten. Dit kan worden bereikt door eerst de afhankelijkheden van de MAM-ondersteuningsbibliotheek te verwijderen uit uw Gradle-buildbestanden. 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
pakketten en com.microsoft.intune.mam.client.support.v4
te vervangen door hun AndroidX-equivalenten.
Verwijzingen naar MAMAppCompatActivity
moeten bijvoorbeeld worden gewijzigd in AndroidX's AppCompatActivity
.
Zoals hierboven beschreven, herschrijft de MAM-build-invoegtoepassing/het hulpprogramma automatisch klassen in de AndroidX-bibliotheken met de juiste MAM-equivalenten tijdens het compileren.
Beperkingen en speciale gevallen
Standaardinschrijving
Uw toepassing kan ook worden geregistreerd voor app-beveiligingsbeleid via een vereenvoudigd proces dat standaardinschrijving wordt genoemd. Deze functie is voornamelijk bedoeld voor de ondersteuning van privé-Line-Of-Business-apps die MSAL niet hebben geïntegreerd.
Waarschuwing
Standaardinschrijving gaat gepaard met aanzienlijke compromissen 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 de standaardinschrijving niet ondersteund.
Standaardinschrijving dwingt de eindgebruiker om de bedrijfsportal te installeren en een MAM-inschrijvingsstroom te voltooien voordat gebruikers toegang krijgen tot uw toepassing.
Opmerking
Standaardinschrijving is onafhankelijk van de cloud.
Schakel standaardinschrijving in met de volgende stappen:
Als uw app MSAL integreert of als u eenmalige aanmelding moet inschakelen, configureert u MSAL. Zo niet, dan kunt u deze stap overslaan.
Schakel standaardinschrijving in door de volgende waarde toe te voegen aan het manifest onder de
<application>
tag:<meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
Schakel het vereiste MAM-beleid in door de volgende waarde toe te voegen in het manifest onder de
<application>
tag:<meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
Geïsoleerde processen
De Intune App SDK kan geen beveiliging toepassen op geïsoleerde processen.
Voor ondersteuning voor geïsoleerde processen (android:isolatedProcess
) is de toevoeging van de onderstaande meta-data-tag vereist.
Waarschuwing
Door deze metagegevens toe te voegen, verklaart uw toepassing dat het geïsoleerde proces geen organisatiegegevens kan blootstellen. Uw toepassing is verantwoordelijk voor het garanderen hiervan.
<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />
Aangepaste beperkingen voor schermopnamen
Als uw app een aangepaste functie voor schermopname bevat die de beperking op Android-niveau Window
FLAG_SECURE
overbrugt, 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 weer te geven in een PNG-bestand, moet u eerst controleren AppPolicy.getIsScreenCaptureAllowed()
.
Als uw app geen aangepaste of externe functies voor schermopnamen bevat, hoeft u geen actie te ondernemen om schermopnamen te beperken.
Het beleid voor schermopname wordt automatisch afgedwongen op het Window
niveau voor alle geïntegreerde MAM-apps.
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 vanuit uw app.
Beperkingen voor het afdwingen van beleid
Inhouds resolvers gebruiken: het Intune-beleid 'overdragen of ontvangen' kan het gebruik van een inhouds resolver 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 (wordt bijvoorbeeldopenOutputStream
gegenereerdFileNotFoundException
als deze wordt geblokkeerd). De app kan bepalen of een fout bij het schrijven van gegevens via een inhouds resolver is veroorzaakt door beleid (of wordt veroorzaakt door beleid) door de aanroep uit te voeren:MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
of als er geen gekoppelde activiteit is:
MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
In dit tweede geval moeten apps met meerdere identiteiten de thread-identiteit op de juiste manier instellen (of een expliciete identiteit doorgeven aan een
getPolicyForIdentity
aanroep).
Geëxporteerde services
Het AndroidManifest.xml bestand dat is opgenomen in de Intune App SDK bevat MAMNotificationReceiverService. Dit moet een geëxporteerde service zijn om de bedrijfsportal toe te staan meldingen te verzenden naar een beheerde app. De service controleert de aanroeper om ervoor te zorgen dat alleen de bedrijfsportal meldingen mag verzenden.
Weerspiegelingsbeperkingen
Sommige VAN de MAM-basisklassen (bijvoorbeeld MAMActivity
, MAMDocumentsProvider
) bevatten methoden (op basis van de oorspronkelijke Android-basisklassen) die gebruikmaken van parameter- of retourtypen 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 implementeert vanuit de Android-basisklassen.
Robolectric
Het testen van het gedrag van de Intune App SDK onder Robolectric wordt niet ondersteund. Er zijn bekende problemen met het uitvoeren van de SDK onder Robolectric vanwege gedrag dat aanwezig is onder Robolectric dat deze niet nauwkeurig nabootst op echte apparaten of emulators.
Als u uw toepassing wilt testen onder Robolectric, is de aanbevolen tijdelijke oplossing om uw toepassingsklasselogica te verplaatsen naar een helper en uw apk voor het testen van eenheden te produceren met een toepassingsklasse die niet overgaat van MAMApplication.