Sdílet prostřednictvím


Příručka pro vývojáře sady Microsoft Intune App SDK pro Android

Sada Microsoft Intune App SDK pro Android umožňuje začlenit zásady ochrany aplikací Intune (označované také jako zásady APP nebo MAM) do nativní aplikace Java/Kotlin pro Android. Aplikace spravovaná Intune je aplikace integrovaná se sadou Intune App SDK. Intune správci můžou zásady ochrany aplikací snadno nasadit do aplikace spravované Intune, když Intune aplikaci aktivně spravuje.

Důležité

Intune pravidelně vydává aktualizace sady Intune App SDK. Doporučujeme přihlásit se k odběru aktualizací v úložištích sady Intune App SDK, abyste mohli aktualizaci začlenit do cyklu vydávání verzí softwaru a zajistili, že vaše aplikace podporují nejnovější nastavení zásad ochrany aplikací.

Před každým hlavním vydáním operačního systému naplánujte povinné aktualizace sady App SDK Intune, abyste zajistili, že vaše aplikace poběží hladce, protože aktualizace operačního systému můžou způsobit zásadní změny. Pokud neaktualizujete na nejnovější verzi před vydáním hlavního operačního systému, může se vám podcházet riziko, že dojde k zásadní změně nebo nebudete moct na aplikaci použít zásady ochrany aplikací.

Tok procesu

Následující diagram znázorňuje tok procesu sady Intune App SDK pro Android:

Diagram architektury vysoké úrovně pro Microsoft Intune

Goals fáze

Průvodce obsahuje podrobnější informace o architektuře sady Intune App SDK, informace o neobvyklých krocích integrace a další užitečný obsah.

Podrobnější informace o sadě SDK

Nahrazení tříd a metod

Sada Intune App SDK se prostřednictvím nástrojů pro sestavení snaží minimalizovat integrační zátěž vývojářů pro Android. Před sestavením nástrojů museli vývojáři provést všechna nahrazení ručně.

Poznámka

Aplikace se teď musí integrovat s nástroji pro sestavení sady SDK, které budou provádět všechna tato nahrazení automaticky.

Základní třídy Androidu jsou nahrazeny odpovídajícími ekvivalenty MAM, aby bylo možné Intune správu. Třídy sady SDK žijí mezi základní třídou Androidu a vlastní odvozenou verzí této třídy. Aktivita aplikace může například skončit s hierarchií dědičnosti, která vypadá takto: AppSpecificActivity rozšíření rozšiřuje MAMActivity .Activity Vrstva MAM filtruje volání systémových operací, aby vaší aplikaci bez problémů poskytla spravovaný pohled na svět.

Kromě základních tříd mohou mít některé třídy, které vaše aplikace používá, aniž by odvozovaly (např. MediaPlayer) také požadované ekvivalenty MAM a některá volání metod musí být také nahrazena. V následující tabulce je uvedeno mnoho nahrazení MAM.

Základní třída Androidu Nahrazení sady 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 (nutné pouze v případě, že binder není vygenerován z rozhraní jazyka AIDL (Android Interface Definition Language)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow NABÍDKA MAMPopup
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

Přejmenované metody

V mnoha případech byla metoda dostupná ve třídě Androidu v náhradní třídě MAM označena jako konečná. V tomto případě náhradní třída MAM poskytuje podobně pojmenovanou metodu (obecně s MAMpříponou ), kterou byste měli místo toho přepsat. Například při odvození z MAMActivity místo přepsání onCreate() a volání super.onCreate()musí Activity přepsat onMAMCreate() a volat super.onMAMCreate(). Kompilátor Javy by měl vynucovat konečná omezení, aby se zabránilo náhodnému přepsání původní metody místo ekvivalentu MAM.

Zabalené systémové služby

U některých tříd systémových služeb je nutné volat statickou metodu v zabalené třídě MAM místo přímého vyvolání požadované metody v instanci služby. Například volání se getSystemService(ClipboardManager.class).getPrimaryClip() musí stát voláním .MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class) Opět platí, že požadovaný modul plug-in sestavení automaticky provede tyto náhrady.

Třída Androidu Nahrazení sady 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

Některé třídy mají většinu svých metod zabalené, například , , a jiné třídy mají zabalené pouze jednu nebo dvě metody, DownloadManagernapříklad , PrintManager, PrintHelper, View, DragEventa NotificationManagerCompatNotificationManager .PackageManagerContentResolverContentProviderClientClipboardManager

MDM a registrace MAM

Jak je popsáno v části Registrace ve fázi 4 vs. Registrace, sada Intune App SDK "zaregistruje" účty, které vaše aplikace zaregistruje, aby byl tento účet chráněný zásadami. Po úspěšné registraci se účet stane spravovaným a na tento účet by se teď měly použít zásady MAM.

Termín "registrace" může také odkazovat na proces povolení Správa zařízení (MDM) iniciovaný koncovým uživatelem. Registrace MDM je zcela oddělená od registrace zásad ochrany aplikací.

Aplikace integrovaná se sadou SDK může mít účet zaregistrovaný pro zásady ochrany aplikací, aniž by byl tento účet zaregistrovaný pro Správa zařízení. Stejně tak může uživatel zaregistrovat zařízení pro Správa zařízení, aniž by měl aplikace integrované se sadou SDK s účty zaregistrované pro zásady ochrany aplikací.

Když vývojáři a správci odkazují na registraci, obvykle odkazují na registraci MDM, protože registrace zásad ochrany aplikací je pro vývojáře i koncové uživatele z velké části neviditelná. Další podrobnosti o registraci mdm najdete v tématu Registrace zařízení s Androidem .

Tipy pro integraci

Principy protokolů Portál společnosti

Portál společnosti protokoly obsahují informace, které technici Microsoftu používají k vyšetřování problémů. Některé protokoly můžou být užitečné i pro vývojáře, kteří integrují sadu SDK.

Soubor DiagnosticsInfo-scrubbed.log obsahuje zejména informace o tom, které aplikace spravuje MAM, a podrobnosti o zásadách PolicyDB Information MAM v části . Každá spravovaná aplikace má v oddílu PolicyDB Information záznam. Tady byste měli hledat název balíčku vaší aplikace, abyste ověřili, že zásady MAM jsou správně zacílené na vaši aplikaci. Pokud tady nevidíte název balíčku vaší aplikace, znamená to, že se na přihlášený účet nepoužijí zásady MAM.

Popis jednotlivých nastavení zásad MAM najdete v tématu Nastavení zásad ochrany aplikací pro Android v Microsoft Intune. Popis toho, jak se tato nastavení zobrazí v protokolech Portál společnosti, najdete v tématu Kontrola protokolů ochrany klientských aplikací. Pokud se zásady MAM nevynucují podle očekávání, doporučujeme zkontrolovat Portál společnosti protokoly nebo diagnostické uživatelské rozhraní, ověřit, že je vaše aplikace spravovaná zásadami MAM, a ověřit, že nastavení zásad mají očekávané hodnoty.

Protokoly Portál společnosti můžete shromažďovat jedním z následujících způsobů:

  • Prostřednictvím Portál společnosti
    • Otevření aplikace Portál společnosti
    • Výběr nabídky se třemi tečkami v pravém horním rohu
    • Vyberte Nastavení.
    • V části Diagnostické protokoly vyberte Uložit protokoly.
    • Postupujte podle výzvy a zvolte výstupní adresář pro uložení protokolů Portál společnosti.
    • Pomocí adb shell pull příkazu natáhněte protokoly ze zařízení s Androidem na místní počítač.
  • [Pro přístup k protokolům spravovaných aplikací použijte Microsoft Edge pro Android. Zobrazí se uživatelské rozhraní pro shromažďování protokolů Portál společnosti a zobrazení diagnostiky MAM.
  • Voláním MAMPolicyManager.showDiagnostics(context) zobrazíte stejné uživatelské rozhraní pro shromažďování protokolů Portál společnosti.

Rychlé testování se změnou zásad

Při vývoji a testování integrace sady Intune App SDK vaší aplikace můžete často měnit nastavení zásad ochrany aplikací pro testovacího uživatele.

Ve výchozím nastavení se integrované aplikace budou ve službě Intune informovat o aktualizovaných zásadách každých 30 minut, pokud jsou aktivní. Tomuto čekání se můžete vyhnout a vynutit přihlášení přes Portál společnosti:

  1. Spusťte Portál společnosti. Nemusíte se přihlašovat.
  2. Vyberte ... ikona nabídky.
  3. Vyberte Nastavení.
  4. Přejděte k nastavení s názvem Zásady správy.
  5. Stiskněte tlačítko Synchronizovat.

Tím se okamžitě naplánuje ohlášení rezervace a načte se aktuální zásady cílené na vaši aplikaci a účet.

Řešení potíží s migrací na AndroidX

Pokud jste před využitím AndroidX integrovali sadu Intune App SDK, může při migraci na AndroidX dojít k chybě podobné této:

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

K těmto chybám může dojít, protože vaše aplikace odkazuje na starší třídy podpory sady SDK. Třídy podpory MAM zabalí třídy podpory Androidu, které se přesunuly do AndroidX. Pokud chcete s těmito chybami bojovat, nahraďte všechny odkazy na třídy podpory MAM jejich ekvivalenty AndroidX. Toho lze dosáhnout tak, že nejprve odeberete závislosti knihovny podpory MAM ze souborů sestavení Gradle. Příslušné řádky budou vypadat přibližně takto:

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

Potom opravte výsledné chyby v době kompilace nahrazením všech odkazů na třídy MAM v com.microsoft.intune.mam.client.support.v7 balíčcích a com.microsoft.intune.mam.client.support.v4 jejich ekvivalenty AndroidX. Například odkazy na MAMAppCompatActivity by měly být změněny AppCompatActivityna AndroidX . Jak je popsáno výše, modul plug-in nebo nástroj pro sestavení MAM automaticky přepíše třídy v knihovnách AndroidX příslušnými ekvivalenty MAM v době kompilace.

Omezení a zvláštní případy

Výchozí registrace

Vaše aplikace se může ke zásadám ochrany aplikací registrovat alternativně prostřednictvím zjednodušeného procesu označovaného jako výchozí registrace. Tato funkce je primárně určená k podpoře privátních obchodních aplikací, které nemají integrovaný protokol MSAL.

Upozornění

Výchozí registrace má významné kompromisy a nedoporučuje se. Aplikace využívající výchozí registraci nepodporují podmíněný přístup, nevyužívají výhod jednotného přihlašování se službami Microsoftu a nemůžou je používat Intune účty. Pokud se vaše aplikace dodává do veřejného obchodu s aplikacemi, výchozí registrace se nepodporuje.

Výchozí registrace přinutí koncového uživatele nainstalovat Portál společnosti a dokončit tok registrace MAM před povolením uživatelů do vaší aplikace.

Poznámka

Výchozí registrace podporuje suverénní cloud.

Následujícím postupem povolte výchozí registraci:

  1. Pokud vaše aplikace integruje MSAL nebo potřebujete povolit jednotné přihlašování, nakonfigurujte MSAL. Pokud ne, můžete tento krok přeskočit.

  2. Povolte výchozí registraci přidáním následující hodnoty do manifestu pod <application> značku:

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Povolte požadované zásady MAM přidáním následující hodnoty do manifestu pod <application> značku:

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

Izolované procesy

Sada Intune App SDK nemůže použít ochranu na izolované procesy. Podpora izolovaných procesů (android:isolatedProcess) vyžaduje přidání značky metadat níže.

Upozornění

Přidáním těchto metadat aplikace deklaruje, že izolovaný proces nemůže vystavit data organizace. Za to zodpovídá vaše aplikace.

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

Omezení vlastních snímků obrazovky

Pokud vaše aplikace obsahuje funkci vlastního zachycení obrazovky, která obchází omezení na úrovni FLAG_SECURE AndroiduWindow, musíte před povolením úplného přístupu k této funkci zkontrolovat zásady zachycení obrazovky. Pokud například vaše aplikace používá k vykreslení aktuálního zobrazení do souboru PNG vlastní vykreslovací modul, musíte nejprve zkontrolovat AppPolicy.getIsScreenCaptureAllowed().

Pokud vaše aplikace neobsahuje žádné vlastní funkce nebo funkce pro pořizování snímků obrazovky od jiných výrobců, nemusíte provádět žádnou akci, která by omezila pořizování snímků obrazovky. Zásady zachycení obrazovky se automaticky vynucuje na Window úrovni všech integrovaných aplikací MAM.

Všechny pokusy operačního systému nebo jiné aplikace o zachycení objektu Window ve vaší aplikaci se podle potřeby zablokují. Pokud se například uživatel pokusí zachytit obrazovku vaší aplikace prostřednictvím integrovaných funkcí snímku obrazovky nebo nahrávání obrazovky v Androidu, bude zachycení automaticky omezeno bez účasti vaší aplikace.

Omezení vynucení zásad

  • Použití překladačů obsahu: Zásady Intune "přenos nebo příjem" můžou blokovat nebo částečně blokovat použití překladače obsahu pro přístup k poskytovateli obsahu v jiné aplikaci. To způsobí, openOutputStream že ContentResolver metody vrátí hodnotu null nebo vyvolají hodnotu selhání (například vyvolajíFileNotFoundException, pokud jsou blokované). Aplikace může zjistit, jestli příčinou selhání zápisu dat prostřednictvím překladače obsahu byly zásady (nebo zásady), a to pomocí volání:

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

    nebo pokud není přidružená žádná aktivita:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    V tomto druhém případě se aplikace s více identitou musí postarat o správné nastavení identity vlákna (nebo předání explicitní identity volání getPolicyForIdentity ).

Exportované služby

Soubor AndroidManifest.xml, který je součástí sady INTUNE App SDK, obsahuje MAMNotificationReceiverService, což musí být exportovaná služba, aby Portál společnosti mohla posílat oznámení do spravované aplikace. Služba zkontroluje volajícího, aby se ujistila, že oznámení může posílat jenom Portál společnosti.

Omezení reflexe

Některé základní třídy MAM (například MAMActivity, MAMDocumentsProvider) obsahují metody (založené na původních základních třídách Androidu), které používají parametry nebo návratové typy, které se nacházejí pouze nad určitými úrovněmi rozhraní API. Z tohoto důvodu nemusí být vždy možné použít reflexi k výčtu všech metod komponent aplikace. Toto omezení se neomezuje na MAM, jedná se o stejné omezení, které by se použilo, kdyby aplikace sama implementovala tyto metody ze základních tříd Androidu.

Robolectric

Testování chování sady Intune App SDK v robolectricu se nepodporuje. Existují známé problémy se spuštěním sady SDK v nástroji Robolectric kvůli chování, které se vyskytuje v nástroji Robolectric a které přesně nenapodobuje chování na skutečných zařízeních nebo emulátorech.

Pokud potřebujete otestovat aplikaci v nástroji Robolectric, doporučeným alternativním řešením je přesunout logiku třídy aplikace do pomocného nástroje a vytvořit soubor APK pro testování jednotek s třídou aplikace, která nedědí z MAMApplication.