Entwicklerhandbuch für Microsoft Intune App SDK für Android
Mit dem Microsoft Intune App SDK für Android können Sie Intune App-Schutzrichtlinien (auch als APP- oder MAM-Richtlinien bezeichnet) in Ihre native Java/Kotlin Android-App integrieren. Eine Intune verwaltete Anwendung ist eine Anwendung, die in das Intune App SDK integriert ist. Intune Administratoren können App-Schutzrichtlinien ganz einfach für Ihre 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 Ihren Releasezyklus für die Softwareentwicklung integrieren und sicherstellen können, dass Ihre Apps die neuesten Einstellungen der App-Schutzrichtlinie unterstützen.
Planen Sie vor jeder Hauptversion des Betriebssystems obligatorische Intune App SDK-Updates, um sicherzustellen, dass Ihre App weiterhin reibungslos ausgeführt wird, da Betriebssystemupdates zu Breaking Changes führen können. Wenn Sie nicht auf die neueste Version vor einer Hauptversion des Betriebssystems aktualisieren, besteht möglicherweise das Risiko, dass es zu einem Breaking Change kommt und/oder keine App-Schutzrichtlinien auf Ihre App anwenden können.
Prozessablauf
Das folgende Diagramm enthält den Prozessflow Intune App SDK für Android:
Stage Goals
Der Leitfaden enthält ausführlichere Informationen zur Architektur des Intune App SDK, Informationen zu ungewöhnlichen Integrationsschritten und anderen hilfreichen Inhalten.
Das SDK im Detail
Klassen- und Methodenersetzungen
Durch die Buildtools versucht das Intune App SDK, den Integrationsaufwand von Android-Entwicklern zu minimieren. Vor den Buildtools mussten Entwickler alle Ersetzungen manuell durchführen.
Hinweis
Apps müssen jetzt in die SDK-Buildtools integriert werden, die alle diese Ersetzungen automatisch ausführen.
Android-Basisklassen werden durch ihre jeweiligen MAM-Entsprechungen ersetzt, um Intune Verwaltung zu ermöglichen.
Die SDK-Klassen befinden sich zwischen der Android-Basisklasse und der eigenen abgeleiteten Version dieser Klasse.
Beispielsweise kann eine App-Aktivität zu einer Vererbungshierarchie führen, die wie folgt aussieht: AppSpecificActivity
erweitert MAMActivity
erweitert Activity
.
Die MAM-Ebene filtert Aufrufe von Systemvorgängen, um Ihrer App nahtlos eine verwaltete Ansicht der Welt zu bieten.
Zusätzlich zu den Basisklassen verfügen einige Klassen, die Ihre App ohne Ableitung (z. B. MediaPlayer
) verwenden kann, auch über erforderliche MAM-Entsprechungen, und einige Methodenaufrufe müssen ebenfalls ersetzt werden.
In der folgenden Tabelle sind viele der MAM-Ersetzungen aufgeführt.
Android-Basisklasse | Intune App SDK-Ersatz |
---|---|
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 (Nur erforderlich, wenn der Binder nicht von 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 | 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 |
Umbenannte Methoden
In vielen Fällen wurde eine methode, die in der Android-Klasse verfügbar ist, in der MAM-Ersetzungsklasse als abgeschlossen markiert.
In diesem Fall stellt die MAM-Ersetzungsklasse eine ähnlich benannte Methode (in der Regel mit MAM
dem Suffix ) bereit, die Sie stattdessen überschreiben sollten.
Beim Ableiten von MAMActivity muss beispielsweise überschrieben onCreate()
onMAMCreate()
und aufgerufen werden, anstatt zu überschreiben und aufzurufen super.onCreate()
Activity
super.onMAMCreate()
.
Der Java-Compiler sollte die endgültigen Einschränkungen erzwingen, um eine versehentliche Außerkraftsetzung der ursprünglichen Methode anstelle der MAM-Entsprechung 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 direkt für den Dienst instance aufzurufen.
Beispielsweise muss ein Aufruf von getSystemService(ClipboardManager.class).getPrimaryClip()
zu einem Aufruf von MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)
werden.
Auch hier nimmt das erforderliche Build-Plug-In diese Ersetzungen automatisch vor.
Android-Klasse | Intune App SDK-Ersatz |
---|---|
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 Methoden umschlossen, z. BClipboardManager
. , ContentProviderClient
, ContentResolver
, und , während PackageManager
andere Klassen nur eine oder zwei Methoden umschlossen haben, z. BDownloadManager
. , PrintManager
, PrintHelper
, NotificationManager
View
DragEvent
, und .NotificationManagerCompat
MDM- und MAM-Registrierung
Wie in Phase 4 im Vergleich zur Registrierung erläutert, "registriert" das Intune App SDK Konten, die Ihre App registriert, damit das Konto durch eine Richtlinie geschützt wird. Das Konto wird verwaltet, nachdem diese Registrierung erfolgreich war, und MAM-Richtlinien sollten jetzt auf dieses Konto angewendet werden.
Der Begriff "Registrierung" kann sich auch auf den vom Endbenutzer initiierten Prozess zum Aktivieren von Geräteverwaltung (MDM) beziehen. Die MDM-Registrierung ist vollständig getrennt von der Registrierung von App-Schutzrichtlinien.
Eine SDK-integrierte App kann über ein Konto verfügen, das für die App-Schutzrichtlinie registriert ist, ohne dass dieses Konto für Geräteverwaltung registriert ist. Ebenso kann ein Benutzer ein Gerät für Geräteverwaltung registriert haben, ohne über SDK-integrierte Apps mit Konten zu verfügen, die für die App-Schutzrichtlinie registriert sind.
Wenn Entwickler und Administratoren auf die Registrierung verweisen, beziehen sie sich in der Regel auf die MDM-Registrierung, da die Registrierung von App-Schutzrichtlinien für Entwickler und Endbenutzer weitgehend unsichtbar ist. Weitere Informationen zur MDM-Registrierung finden Sie unter Registrieren von Android-Geräten .
Integrationstipps
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 dazu, welche Apps von MAM verwaltet werden, und die Mam-Richtliniendetails im PolicyDB Information
Abschnitt.
Jede verwaltete App verfügt über 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 für das angemeldete Konto keine MAM-Richtlinie angewendet wurde.
Eine Beschreibung der einzelnen MAM-Richtlinieneinstellungen finden Sie unter Einstellungen für Android-App-Schutzrichtlinien in Microsoft Intune. Eine Beschreibung, wie diese Einstellungen in den Unternehmensportal Protokollen angezeigt werden, finden Sie unter Überprüfen von Client-App-Schutzprotokollen. Wenn die MAM-Richtlinie nicht wie erwartet erzwungen wird, empfiehlt es sich, Unternehmensportal Protokolle oder die Diagnose-Benutzeroberfläche zu überprüfen, zu überprüfen, ob Ihre App von der MAM-Richtlinie verwaltet wird, und sich zu vergewissern, dass die Richtlinieneinstellungen die erwarteten Werte aufweisen.
Sie können Unternehmensportal Protokolle auf eine der folgenden Arten sammeln:
- Durch die Unternehmensportal
- Öffnen der Unternehmensportal-App
- Wählen Sie das Menü mit den drei Punkten in der rechten oben angezeigten Ecke aus.
- Wählen Sie Einstellungen aus.
- Wählen Sie unter Diagnoseprotokolle die Option Protokolle speichern aus.
- Folgen Sie der Aufforderung, um das Ausgabeverzeichnis auszuwählen, um die Unternehmensportal Protokolle zu speichern.
- Verwenden Sie
adb shell pull
den Befehl , um die Protokolle von Ihrem Android-Gerät auf Ihren lokalen Computer zu pullen.
- [Verwenden Sie Microsoft Edge für Android, um auf Protokolle der verwalteten App zuzugreifen]. Dadurch wird die Benutzeroberfläche zum Sammeln von Unternehmensportal Protokollen und Anzeigen von MAM-Diagnose angezeigt.
- Rufen Sie auf
MAMPolicyManager.showDiagnostics(context)
, um dieselbe Benutzeroberfläche zum Sammeln von Unternehmensportal Protokollen anzuzeigen.
Schnelles Testen mit sich ändernder Richtlinie
Während Sie die Integration des Intune App SDK für Ihre App entwickeln und testen, können Sie die Einstellungen für die App-Schutzrichtlinie für Ihren Testbenutzer häufig ändern.
Standardmäßig checken integrierte Apps alle 30 Minuten beim Intune-Dienst ein, um eine aktualisierte Richtlinie zu erhalten, wenn sie aktiv sind. Sie können dieses Warten vermeiden und einen Check-In durch die Unternehmensportal erzwingen:
- Starten Sie die Unternehmensportal. Sie müssen sich nicht anmelden.
- Wählen Sie ... Menüsymbol.
- Wählen Sie Einstellungen aus.
- Scrollen Sie zur Einstellung "Verwaltungsrichtlinie".
- Klicken 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.
Problembehandlung bei der AndroidX-Migration
Wenn Sie das Intune App SDK vor der Nutzung von AndroidX integriert haben, tritt bei der Migration zu AndroidX möglicherweise ein Fehler wie der folgende auf:
incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar
Diese Fehler können auftreten, weil Ihre App auf die Legacyunterstützungsklassen des SDK verweist. Die MAM-Unterstützungsklassen umschließen Android-Supportklassen, die in AndroidX verschoben wurden. Um solche Fehler zu beheben, ersetzen Sie alle MAM-Unterstützungsklassenverweise durch ihre AndroidX-Entsprechungen. Dies kann erreicht werden, indem Sie zuerst die Mam-Unterstützungsbibliotheksabhängigkeiten 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
Paketen und com.microsoft.intune.mam.client.support.v4
durch ihre AndroidX-Entsprechungen ersetzen.
Beispielsweise sollten Verweise auf MAMAppCompatActivity
in androidX AppCompatActivity
geändert werden.
Wie oben erläutert, schreibt das MAM-Build-Plug-In/-Tool Klassen in den AndroidX-Bibliotheken automatisch mit den entsprechenden MAM-Entsprechungen zur Kompilierzeit um.
Einschränkungen und Sonderfälle
Standardregistrierung
Ihre Anwendung kann sich alternativ über einen vereinfachten Prozess, der als Standardregistrierung bezeichnet wird, für App-Schutzrichtlinien registrieren. Dieses Feature dient in erster Linie der Unterstützung privater branchenspezifischer Apps, die MSAL nicht integriert haben.
Warnung
Die Standardregistrierung bringt erhebliche Kompromisse mit sich und wird nicht empfohlen. Apps, die die Standardregistrierung nutzen, unterstützen keinen bedingten Zugriff, profitieren nicht vom einmaligen Anmelden mit Microsoft-Diensten und können nicht von Konten ohne Intune verwendet werden. Wenn Ihre App in einen öffentlichen App Store geliefert wird, wird die Standardregistrierung nicht unterstützt.
Die Standardregistrierung zwingt den Endbenutzer, die Unternehmensportal zu installieren und einen MAM-Registrierungsflow abzuschließen, bevor Benutzer in Ihre Anwendung zugelassen werden.
Hinweis
Die Standardregistrierung ist sovereign cloudfähig.
Aktivieren Sie die Standardregistrierung mit den folgenden Schritten:
Wenn Ihre App MSAL integriert oder Sie SSO aktivieren müssen, konfigurieren Sie MSAL. Andernfalls können Sie diesen Schritt überspringen.
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" />
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 keinen Schutz auf isolierte Prozesse anwenden.
Die Unterstützung isolierter Prozesse (android:isolatedProcess
) erfordert das Hinzufügen des unten angegebenen Metadatentags.
Warnung
Durch das Hinzufügen dieser Metadaten deklariert Ihre Anwendung, dass der isolierte Prozess organization Daten nicht 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" />
Benutzerdefinierte Bildschirmaufnahmeeinschränkungen
Wenn Ihre App ein benutzerdefiniertes Window
Feature für die Bildschirmaufnahme enthält, das die Einschränkung auf Android-Ebene FLAG_SECURE
umgeht, müssen Sie die Bildschirmaufnahmerichtlinie überprüfen, bevor Sie den Vollzugriff auf das Feature zulassen.
Wenn Ihre App beispielsweise ein benutzerdefiniertes Renderingmodul verwendet, um die aktuelle Ansicht in einer PNG-Datei zu rendern, müssen Sie zuerst überprüfen AppPolicy.getIsScreenCaptureAllowed()
.
Wenn Ihre App keine benutzerdefinierten Features oder Features für die Bildschirmaufnahme von Drittanbietern enthält, müssen Sie keine Maßnahmen ergreifen, um Bildschirmaufnahmen einzuschränken.
Die Bildschirmaufnahmerichtlinie wird automatisch auf der Window
Ebene für alle mam-integrierten Apps erzwungen.
Alle Versuche des Betriebssystems oder einer anderen App, eine Window
in Ihrer App zu erfassen, werden bei Bedarf blockiert.
Wenn ein Benutzer beispielsweise versucht, den Bildschirm Ihrer App über die integrierten Screenshot- oder Bildschirmaufzeichnungsfeatures von Android zu erfassen, wird die Erfassung automatisch ohne Teilnahme von Ihrer App eingeschränkt.
Einschränkungen bei der Richtlinienerzwingung
Verwenden von Inhaltskonfliktlösern: Die Richtlinie "Übertragen oder Empfangen" Intune kann die Verwendung eines Inhaltskonfliktlösers 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 ermitteln, ob ein Fehler beim Schreiben von Daten über einen Inhaltskonfliktlöser durch eine Richtlinie (oder durch eine Richtlinie) verursacht wurde, indem sie den Folgenden aufruft:MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
oder , wenn keine zugeordnete Aktivität vorhanden 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 AndroidManifest.xml-Datei, die im Intune App SDK enthalten ist, enthält MAMNotificationReceiverService, bei dem es sich um einen exportierten Dienst handelt, damit der Unternehmensportal Benachrichtigungen an eine verwaltete App senden kann. Der Dienst überprüft den Aufrufer, um sicherzustellen, dass nur der Unternehmensportal Benachrichtigungen senden darf.
Reflektionseinschränkungen
Einige der MAM-Basisklassen (z. B MAMActivity
. , MAMDocumentsProvider
) enthalten Methoden (basierend auf den ursprünglichen Android-Basisklassen), die Parameter- oder Rückgabetypen verwenden, die nur über bestimmten 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, sie ist die gleiche Einschränkung, die gelten würde, wenn die App selbst diese Methoden aus den Android-Basisklassen implementiert.
Robolectric
Das Testen Intune Verhalten des App SDK unter Robolectric wird nicht unterstützt. Es gibt bekannte Probleme beim Ausführen des SDK unter Robolectric aufgrund von Verhaltensweisen unter Robolectric, die diese auf echten Geräten oder Emulatoren nicht genau imitieren.
Wenn Sie Ihre Anwendung unter Robolectric testen müssen, empfiehlt es sich, ihre Anwendungsklassenlogik in ein Hilfsprogramm zu verschieben und Ihr Komponententest-APK mit einer Anwendungsklasse zu erstellen, die nicht von MAMApplication erbt.