Teilen über


Entwicklerhandbuch zum 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 von 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 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 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 Prozessablauf des Intune App SDK für Android:

Allgemeines Architekturdiagramm für Microsoft Intune.

Etappenziele

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 die Intune-Verwaltung zu aktivieren. 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 Ersetzung des Intune App SDK
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 MAMdem 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()Activitysuper.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 die Dienstinstanz 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 Ersetzung 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 Methoden umschlossen, z. BClipboardManager. , ContentProviderClient, ContentResolver, und , während PackageManager andere Klassen nur eine oder zwei Methoden umschlossen haben, z. BDownloadManager. , PrintManager, PrintHelper, NotificationManagerViewDragEvent, 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 der Geräteverwaltung (Device Management, 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 die Geräteverwaltung registriert ist. Ebenso kann ein Benutzer ein Gerät für die 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 Unternehmensportalprotokollen

Unternehmensportalprotokolle 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 Android-App-Schutzrichtlinieneinstellungen in Microsoft Intune. Eine Beschreibung, wie diese Einstellungen in den Unternehmensportalprotokollen angezeigt werden, finden Sie unter Überprüfen von Client-App-Schutzprotokollen. Wenn die MAM-Richtlinie nicht wie erwartet erzwungen wird, empfehlen wir Ihnen, die Protokolle des Unternehmensportals 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 Unternehmensportalprotokolle auf eine der folgenden Arten sammeln:

  • Über das 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 Unternehmensportalprotokolle 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 Erfassen von Unternehmensportalprotokollen und Zum Anzeigen der MAM-Diagnose angezeigt.
  • Rufen Sie auf MAMPolicyManager.showDiagnostics(context) , um dieselbe Benutzeroberfläche zum Sammeln von Unternehmensportalprotokollen 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 nach einer aktualisierten Richtlinie ein, wenn sie aktiv sind. Sie können dieses Warten vermeiden und einen Check-In über das Unternehmensportal erzwingen:

  1. Starten Sie das Unternehmensportal. Sie müssen sich nicht anmelden.
  2. Wählen Sie ... Menüsymbol.
  3. Wählen Sie Einstellungen aus.
  4. Scrollen Sie zur Einstellung "Verwaltungsrichtlinie".
  5. 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, 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, 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 AppCompatActivitygeä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 Nicht-Intune-Konten verwendet werden. Wenn Ihre App in einen öffentlichen App Store geliefert wird, wird die Standardregistrierung nicht unterstützt.

Die Standardregistrierung zwingt den Endbenutzer, das 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:

  1. Wenn Ihre App MSAL integriert oder Sie SSO aktivieren müssen, konfigurieren Sie MSAL. Andernfalls 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 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 keine Organisationsdaten 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 WindowFeature 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 Intune-Richtlinie "Übertragen oder Empfangen" 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 das Unternehmensportal Benachrichtigungen an eine verwaltete App senden kann. Der Dienst überprüft den Aufrufer, um sicherzustellen, dass nur das 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 des Intune App SDK-Verhaltens 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.