Microsoft Intune App SDK für Android Entwicklerhandbuch

Mit dem Microsoft Intune App SDK für Android können Sie Intune-App-Schutzrichtlinien (auch bekannt als MAM-Richtlinien) in Ihre native Java/Kotlin-Android-App integrieren. Eine von Intune verwaltete Anwendung ist eine Anwendung, die in das Intune App SDK integriert ist. Intune-Administratoren können App-Schutzrichtlinien auf einfache Weise für Ihre von Intune verwaltete App bereitstellen, wenn Intune die App aktiv verwaltet.

Wichtig

Intune veröffentlicht regelmäßig Updates für das Intune App SDK. Es wird empfohlen, die Intune App SDK-Repositorys für Updates zu abonnieren, damit Sie das Update in den Veröffentlichungszyklus Ihrer Softwareentwicklung integrieren und sicherstellen können, dass Ihre Apps die neuesten App-Schutzrichtlinieneinstellungen unterstützen.

Planen Sie obligatorische Intune App SDK-Updates vor jeder Hauptversion des Betriebssystems ein, um sicherzustellen, dass Ihre App weiterhin reibungslos ausgeführt wird, da Betriebssystemupdates wichtige Änderungen verursachen können. Wenn Sie vor einer Hauptversion des Betriebssystems nicht auf die neueste Version aktualisieren, besteht möglicherweise das Risiko, dass eine wichtige Änderung auftritt und/oder App-Schutzrichtlinien nicht auf Ihre App angewendet werden können.

Ablauf

Das folgende Diagramm zeigt den Prozessfluss des Intune App SDK für Android:

High-Level-Architekturdiagramm für Microsoft Intune.

Etappenziele

Das Handbuch enthält ausführlichere Informationen zur Architektur des Intune App SDK, Informationen zu ungewöhnlichen Integrationsschritten und weitere hilfreiche Inhalte.

Das SDK im Detail

Klassen- und Methodenersetzungen

Mit den Buildtools versucht das Intune App SDK, den Integrationsaufwand für Android-Entwickler zu minimieren. Vor dem Erstellen der Buildtools mussten Entwickler alle Ersetzungen manuell durchführen.

Hinweis

Apps müssen jetzt in das SDK-Buildtool integriert werden, wodurch alle diese Ersetzungen automatisch ausgeführt werden.

Android-Basisklassen werden durch ihre jeweiligen MAM-Entsprechungen ersetzt, um die Intune-Verwaltung zu aktivieren. Die SDK-Klassen leben zwischen der Android-Basisklasse und der App-eigenen abgeleiteten Version dieser Klasse. Beispielsweise kann eine App-Aktivität mit einer Vererbungshierarchie enden, die wie folgt aussieht: AppSpecificActivity erweitert MAMActivity erweitert .Activity Die MAM-Ebene filtert Aufrufe von Systemvorgängen, um Ihrer App nahtlos eine verwaltete Sicht auf die Welt zu bieten.

Zusätzlich zu den Basisklassen verfügen einige Klassen, die Ihre App verwenden kann, ohne von ihnen abzuleiten (z. B. MediaPlayer), über erforderliche MAM-Entsprechungen, und einige Methodenaufrufe müssen ebenfalls ersetzt werden. In der folgenden Tabelle sind viele der MAM-Ersatzmodelle aufgeführt.

Android-Basisklasse Ersetzen des Intune App SDK
android.app.Activity MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Anwendung 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 (nur erforderlich, wenn der Binder nicht aus einer AIDL-Schnittstelle (Android Interface Definition Language) generiert wird)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenü
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

Umbenannte Methoden

In vielen Fällen wurde eine in der Android-Klasse verfügbare Methode in der MAM-Ersatzklasse als abgeschlossen markiert. In diesem Fall stellt die MAM-Austauschklasse eine Methode mit ähnlichem Namen bereit (im Allgemeinen mit MAMdem Suffix ), die Sie stattdessen überschreiben sollten. Wenn Sie beispielsweise von MAMAcivity ableiten, muss , anstatt zu überschreiben onCreate() und aufzurufensuper.onCreate(), überschreiben onMAMCreate() und aufrufensuper.onMAMCreate(). Activity Der Java-Compiler sollte die letzten Einschränkungen erzwingen, um ein versehentliches Überschreiben der ursprünglichen Methode anstelle des MAM-Äquivalents zu verhindern.

Umschlossene Systemdienste

Für einige Systemdienstklassen ist es erforderlich, eine statische Methode für eine MAM-Wrapperklasse aufzurufen, anstatt die gewünschte Methode für die Dienst-Instance direkt aufzurufen. So muss beispielsweise ein Aufruf von getSystemService(ClipboardManager.class).getPrimaryClip() zu einem Aufruf von MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)werden. Auch hier nimmt das erforderliche Build-Plugin diese Ersetzungen automatisch vor.

Android-Klasse Ersetzen des Intune 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

Bei einigen Klassen sind die meisten ihrer Methoden umschlossen, z. B. ClipboardManager, ContentProviderClientContentResolver, , und PackageManager während andere Klassen nur eine oder zwei Methoden umschlossen haben, DownloadManagerz. B. , PrintManager, PrintHelper, DragEventViewNotificationManager , und .NotificationManagerCompat

MDM- und MAM-Registrierung

Wie in Phase 4 Registrierung vs. Registrierung erläutert, "registriert" das Intune App SDK Konten, die von Ihrer App registriert werden, sodass dieses Konto durch Richtlinien geschützt ist. Das Konto wird nach erfolgreicher Registrierung verwaltet, und die MAM-Richtlinien sollten nun auf dieses Konto angewendet werden.

Der Begriff "Registrierung" kann sich auch auf den vom Endbenutzer initiierten Prozess zum Aktivieren der Geräteverwaltung (MDM) beziehen. Die MDM-Registrierung ist vollständig von der Registrierung der App-Schutzrichtlinie getrennt.

Bei einer SDK-integrierten App kann ein Konto für die App-Schutzrichtlinie registriert sein, ohne dass dieses Konto für die Geräteverwaltung registriert ist. Ebenso kann ein Benutzer ein Gerät für die Geräteverwaltung registriert haben, ohne SDK-integrierte Apps mit Konten zu haben, die für die App-Schutzrichtlinie registriert sind.

Wenn Entwickler und Administratoren von Registrierung sprechen, meinen sie in der Regel die MDM-Registrierung, da die Registrierung von App-Schutzrichtlinien sowohl für Entwickler als auch für Endbenutzer weitgehend unsichtbar ist. Weitere Informationen zur MDM-Registrierung finden Sie unter Registrieren von Android-Geräten .

Tipps zur Integration

Grundlegendes zu Unternehmensportal-Protokollen

Unternehmensportal-Protokolle enthalten Informationen, die Microsoft-Techniker für Problemuntersuchungen verwenden. Einige der Protokolle können auch für Entwickler nützlich sein, die das SDK integrieren.

Insbesondere enthält die Datei DiagnosticsInfo-scrubbed.log Informationen darüber, welche Apps von MAM verwaltet werden, und die MAM-Richtliniendetails im PolicyDB Information Abschnitt. Jede verwaltete App hat einen Eintrag im PolicyDB Information Abschnitt. Sie sollten hier nach dem Paketnamen Ihrer App suchen, um zu bestätigen, dass die MAM-Richtlinie ordnungsgemäß auf Ihre App ausgerichtet ist. Wenn der Paketname Ihrer App hier nicht angezeigt wird, weist dies darauf hin, dass auf das angemeldete Konto keine MAM-Richtlinie angewendet wurde.

Eine Beschreibung der einzelnen MAM-Richtlinieneinstellungen finden Sie unter Richtlinieneinstellungen für Android-Apps in Microsoft Intune. Eine Beschreibung, wie diese Einstellungen in den Protokollen des Unternehmensportals angezeigt werden, finden Sie unter Überprüfen von Protokollen zum Schutz von Client-Apps. Wenn die MAM-Richtlinie nicht wie erwartet erzwungen wird, empfehlen wir, die Protokolle des Unternehmensportals oder die Diagnosebenutzeroberfläche zu überprüfen, sicherzustellen, dass Ihre App von der MAM-Richtlinie verwaltet wird, und zu überprüfen, ob die Richtlinieneinstellungen die erwarteten Werte verwenden.

Sie können Unternehmensportal-Protokolle auf eine der folgenden Arten sammeln:

  • Über das Unternehmensportal
    • Öffnen Sie die Unternehmensportal-App.
    • Wählen Sie das Menü mit den drei Punkten in der oberen rechten Ecke
    • Wählen Sie "Einstellungen" aus.
    • Wählen Sie unter "Diagnoseprotokolle" die Option "Protokolle speichern" aus.
    • Folgen Sie der Aufforderung, um das Ausgabeverzeichnis zum Speichern der Unternehmensportal-Protokolle auszuwählen.
    • Verwenden Sie adb shell pull den Befehl, um die Protokolle von Ihrem Android-Gerät auf Ihren lokalen Computer zu ziehen.
  • [Verwenden von Microsoft Edge für Android für den Zugriff auf verwaltete App-Protokolle]. Dadurch wird die Benutzeroberfläche zum Sammeln von Unternehmensportal-Protokollen und Anzeigen der MAM-Diagnose angezeigt.
  • Rufen Sie diesen Aufruf MAMPolicyManager.showDiagnostics(context) auf, um dieselbe Benutzeroberfläche zum Sammeln von Unternehmensportal-Protokollen anzuzeigen.

Schnelles Testen mit sich ändernden Richtlinien

Während Sie die Integration des Intune App SDK in Ihre App entwickeln und testen, können Sie häufig die Einstellungen der App-Schutzrichtlinie für Ihren Testbenutzer ändern.

Standardmäßig checken integrierte Apps alle 30 Minuten beim Intune-Dienst ein, um eine aktualisierte Richtlinie zu erhalten, sofern sie aktiv sind. Sie können diese Wartezeit vermeiden und einen Check-in über das Unternehmensportal erzwingen:

  1. Starten Sie das Unternehmensportal. Sie müssen sich nicht anmelden.
  2. Wählen Sie das Symbol ... Menüsymbol.
  3. Wählen Sie Einstellungen aus.
  4. Scrollen Sie zur Einstellung "Verwaltungsrichtlinie".
  5. Drücken Sie auf die Schaltfläche "Synchronisieren".

Dadurch wird sofort ein Check-in geplant und die aktuelle Richtlinie für Ihre App und Ihr Konto abgerufen.

Fehlerbehebung bei der AndroidX-Migration

Wenn Sie das Intune App SDK integriert haben, bevor Sie AndroidX nutzen, kann bei der Migration zu AndroidX ein Fehler wie der folgende auftreten:

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

Diese Fehler können auftreten, da Ihre App auf die Legacy-Unterstützungsklassen des SDK verweist. Die MAM-Supportklassen umschließen Android-Supportklassen, die in AndroidX verschoben wurden. Um solche Fehler zu vermeiden, ersetzen Sie alle MAM-Unterstützungsklassenverweise durch ihre AndroidX-Entsprechungen. Dies kann erreicht werden, indem Sie zuerst die Abhängigkeiten der MAM-Unterstützungsbibliothek aus Ihren Gradle-Builddateien entfernen. Die betreffenden Zeilen sehen in etwa wie folgt aus:

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

Beheben Sie dann die resultierenden Kompilierzeitfehler, indem Sie alle Verweise auf MAM-Klassen in den com.microsoft.intune.mam.client.support.v7 und-Paketen com.microsoft.intune.mam.client.support.v4 durch ihre AndroidX-Entsprechungen ersetzen. Beispielsweise sollten Verweise auf MAMAppCompatActivity in AndroidX's AppCompatActivitygeändert werden. Wie oben erläutert, schreibt das MAM-Build-Plugin/Tool automatisch Klassen in den AndroidX-Bibliotheken mit den entsprechenden MAM-Entsprechungen zur Kompilierzeit um.

Einschränkungen und Sonderfälle

Standardregistrierung

Ihre Anwendung kann sich alternativ über einen vereinfachten Prozess, der Standardregistrierung genannt wird, für App-Schutzrichtlinien registrieren. Dieses Feature dient in erster Linie der Unterstützung privater Branchen-Apps, in die MSAL nicht integriert ist.

Warnung

Die Standardregistrierung ist mit erheblichen Nachteilen verbunden und wird nicht empfohlen. Apps, die die Standardregistrierung nutzen, unterstützen keinen bedingten Zugriff, profitieren nicht von SSO mit Microsoft-Diensten und können nicht von Nicht-Intune-Konten verwendet werden. Wenn Ihre App an einen öffentlichen App-Store ausgeliefert wird, wird die Standardregistrierung nicht unterstützt.

Bei der Standardregistrierung muss der Endbenutzer das Unternehmensportal installieren und einen MAM-Registrierungsablauf abschließen, bevor er Benutzer in Ihre Anwendung einlässt.

Hinweis

Die Standardregistrierung ist souverän cloudfähig.

Aktivieren Sie die Standardregistrierung mit den folgenden Schritten:

  1. Wenn Ihre App MSAL integriert oder Sie SSO aktivieren müssen, konfigurieren Sie MSAL. Wenn nicht, können Sie diesen Schritt überspringen.

  2. Aktivieren Sie die Standardregistrierung, indem Sie den folgenden Wert im Manifest unter dem <application> Tag hinzufügen:

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Aktivieren Sie die erforderliche MAM-Richtlinie, indem Sie den folgenden Wert im Manifest unter dem <application> Tag hinzufügen:

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

Isolierte Prozesse

Das Intune App SDK kann keine Schutzmaßnahmen auf isolierte Prozesse anwenden. Die Unterstützung isolierter Prozesse (android:isolatedProcess) erfordert das Hinzufügen des unten stehenden Metadaten-Tags.

Warnung

Durch das Hinzufügen dieser Metadaten deklariert Ihre Anwendung, dass der isolierte Prozess keine Organization-Daten verfügbar machen kann. Ihre Anwendung ist dafür verantwortlich, dies zu gewährleisten.

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

Einschränkungen für benutzerdefinierte Bildschirmaufnahmen Mitschreiben

Wenn Ihre App eine benutzerdefinierte Bildschirmaufnahmefunktion enthält, die die Einschränkungen auf WindowAndroid-Ebene FLAG_SECURE umgeht, müssen Sie die Bildschirmaufnahmerichtlinie überprüfen, bevor Sie den vollständigen Zugriff auf die Funktion zulassen. Wenn Ihre App beispielsweise eine benutzerdefinierte Rendering-Engine verwendet, um die aktuelle Ansicht in eine PNG-Datei zu rendern, müssen Sie zuerst überprüfen AppPolicy.getIsScreenCaptureAllowed().

Wenn Ihre App keine benutzerdefinierten oder Drittanbieter-Bildschirmaufnahmefunktionen enthält, müssen Sie keine Maßnahmen ergreifen, um Bildschirmaufnahmen einzuschränken. Die Bildschirmaufnahmerichtlinie wird automatisch auf der Ebene für Window alle in MAM integrierten Apps erzwungen.

Alle Versuche des Betriebssystems oder einer anderen App, eine Window in Ihrer App zu erfassen, werden nach Bedarf blockiert. Wenn ein Benutzer beispielsweise versucht, den Bildschirm Ihrer App über die integrierten Screenshot- oder Bildschirmaufzeichnungsfunktionen von Android aufzuzeichnen, wird die Aufzeichnung automatisch ohne Beteiligung Ihrer App eingeschränkt.

Einschränkungen bei der Richtlinienerzwingung

  • Verwenden von Inhaltsresolvern: Die Intune-Richtlinie "Übertragen oder Empfangen" kann die Verwendung eines Inhaltsresolvers für den Zugriff auf den Inhaltsanbieter in einer anderen App blockieren oder teilweise blockieren. Dies führt dazu, dass ContentResolver Methoden null zurückgeben oder einen Fehlerwert auslösen (z. B. wird ausgelöstFileNotFoundException, openOutputStream wenn blockiert). Die App kann durch den Aufruf ermitteln, ob ein Fehler beim Schreiben von Daten über eine Inhaltsauflösung durch eine Richtlinie verursacht wurde (oder durch eine Richtlinie verursacht würde):

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

    Oder wenn keine Aktivität zugeordnet ist:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    In diesem zweiten Fall müssen Apps mit mehreren Identitäten darauf achten, die Threadidentität entsprechend festzulegen (oder eine explizite Identität an einen getPolicyForIdentity Aufruf zu übergeben).

Exportierte Dienste

Die im Intune App SDK enthaltene AndroidManifest.xml Datei enthält MAMNotificationReceiverService, wobei es sich um einen exportierten Dienst handeln muss, damit der Unternehmensportal Benachrichtigungen an eine verwaltete App senden kann. Der Dienst überprüft den Anrufer, um sicherzustellen, dass nur das Unternehmensportal Benachrichtigungen senden darf.

Einschränkungen für Reflektion

Einige der MAM-Basisklassen (z. B. , ) enthalten Methoden (basierend auf den ursprünglichen Android-Basisklassen), die Parameter- oder Rückgabetypen verwenden, MAMActivityMAMDocumentsProviderdie nur oberhalb bestimmter API-Ebenen vorhanden sind. Aus diesem Grund ist es möglicherweise nicht immer möglich, Reflektion zum Aufzählen aller Methoden von App-Komponenten zu verwenden. Diese Einschränkung ist nicht auf MAM beschränkt, es ist die gleiche Einschränkung, die gelten würde, wenn die App selbst diese Methoden aus den Android-Basisklassen implementieren würde.

Robolectric

Das Testen des Verhaltens des Intune App SDK unter Robolectric wird nicht unterstützt. Es gibt bekannte Probleme beim Ausführen des SDK unter Robolectric aufgrund von Verhaltensweisen, die unter Robolectric vorhanden sind und jene auf echten Geräten oder Emulatoren nicht genau nachahmen.

Wenn Sie Ihre Anwendung unter Robolectric testen müssen, besteht die empfohlene Problemumgehung darin, Ihre Anwendungsklassenlogik auf ein Hilfsprogramm zu verschieben und Ihre Unit-Test-APK mit einer Anwendungsklasse zu erstellen, die nicht von MAMApplication erbt.