Przewodnik dewelopera po zestawie SDK aplikacji usługi Microsoft Intune dla systemu Android

Zestaw SDK aplikacji usługi Microsoft Intune dla systemu Android umożliwia włączenie zasad ochrony aplikacji usługi Intune (znanych również jako zasady aplikacji lub zarządzania aplikacjami mobilnymi) do natywnej aplikacji Java/Kotlin dla systemu Android. Aplikacja zarządzana przez usługę Intune jest zintegrowana z zestawem SDK aplikacji usługi Intune. Administratorzy usługi Intune mogą łatwo wdrażać zasady ochrony aplikacji w aplikacji zarządzanej przez usługę Intune, gdy usługa Intune aktywnie zarządza aplikacją.

Ważna

Usługa Intune regularnie publikuje aktualizacje zestawu SDK aplikacji usługi Intune. Zalecamy subskrybowanie repozytoriów zestawu SDK aplikacji usługi Intune na potrzeby aktualizacji, aby można było włączyć tę aktualizację do cyklu tworzenia oprogramowania i upewnić się, że aplikacje obsługują najnowsze ustawienia zasad ochrony aplikacji.

Zaplanuj wprowadzenie obowiązkowych aktualizacji zestawu SDK aplikacji usługi Intune przed każdą główną wersją systemu operacyjnego, aby upewnić się, że aplikacja będzie nadal działać bezproblemowo, ponieważ aktualizacje systemu operacyjnego mogą powodować zmiany powodujące niezgodność. Jeśli nie zaktualizujesz najnowszej wersji przed główną wersją systemu operacyjnego, możesz napotkać niezgodną zmianę lub nie można zastosować zasad ochrony aplikacji do aplikacji.

Przepływ procesu

Na poniższym diagramie przedstawiono przepływ procesów zestawu SDK aplikacji usługi Intune dla systemu Android:

Diagram architektury wysokiego poziomu dla usługi Microsoft Intune.

Cele etapów

Przewodnik zawiera więcej szczegółów dotyczących architektury zestawu SDK aplikacji usługi Intune, informacji o nietypowych krokach integracji i innej przydatnej zawartości.

Zestaw SDK jest bardziej szczegółowy

Zamiany klas i metod

Za pomocą narzędzi kompilacji zestaw SDK aplikacji usługi Intune próbuje zminimalizować obciążenia związane z integracją deweloperów systemu Android. Przed rozpoczęciem tworzenia narzędzi deweloperzy musieli wykonać wszystkie zamiany ręcznie.

Uwaga

Aplikacje muszą teraz integrować się z narzędziami kompilacji zestawu SDK, które będą automatycznie wykonywać wszystkie te zamiany.

Klasy bazowe systemu Android są zastępowane odpowiednimi odpowiednikami zarządzania aplikacjami mobilnymi w celu włączenia zarządzania usługą Intune. Klasy zestawu SDK działają między klasą podstawową systemu Android a własną pochodną wersją tej klasy aplikacji. Na przykład działanie aplikacji może kończyć się hierarchią dziedziczenia, która wygląda następująco: AppSpecificActivity rozszerza MAMActivity rozszerzenie Activity. Warstwa MAM filtruje wywołania operacji systemowych w celu bezproblemowego udostępnienia aplikacji zarządzanego widoku świata.

Oprócz klas podstawowych niektóre klasy, których aplikacja może używać bez pochodnych (np. MediaPlayer) mają również wymagane odpowiedniki funkcji MAM, a niektóre wywołania metod również muszą zostać zastąpione. W poniższej tabeli wymieniono wiele elementów zastępujących funkcje ZARZĄDZANIA aplikacjami mobilnymi.

Klasa bazowa systemu Android Zastępowanie zestawu SDK aplikacji usługi Intune
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 (niezbędne tylko wtedy, gdy binder nie jest generowany z interfejsu języka definicji interfejsu systemu Android (AIDL)
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

Zmieniono nazwy metod

W wielu przypadkach metoda dostępna w klasie systemu Android została oznaczona jako ostateczna w klasie zastępczej MAM. W takim przypadku klasa zamiany funkcji MAM udostępnia metodę o podobnej nazwie (ogólnie sufiks z MAM), którą należy zastąpić. Na przykład w przypadku pochodnej funkcji MAMActivity zamiast zastępowania i wywoływania onCreate()super.onCreate()programu Activity należy zastąpić onMAMCreate() i wywołać metodę super.onMAMCreate(). Kompilator Java powinien wymusić ostateczne ograniczenia, aby zapobiec przypadkowemu zastąpieniu oryginalnej metody zamiast odpowiednika funkcji MAM.

Opakowane usługi systemowe

W przypadku niektórych klas usług systemowych konieczne jest wywołanie metody statycznej w klasie otoki MAM zamiast bezpośredniego wywoływania żądanej metody w wystąpieniu usługi. Na przykład wywołanie getSystemService(ClipboardManager.class).getPrimaryClip() elementu musi stać się wywołaniem metody MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Ponownie wymagana wtyczka kompilacji automatycznie wykonuje te zamiany.

Klasa systemu Android Zastępowanie zestawu SDK aplikacji usługi Intune
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

Niektóre klasy mają opakowaną większość metod, na przykład ClipboardManager, , ContentResolverContentProviderClient, i PackageManager podczas gdy inne klasy mają opakowaną tylko jedną lub dwie metody, na przykład , DownloadManager, PrintManager, PrintHelper, View, DragEventNotificationManager i NotificationManagerCompat.

Rejestrowanie za pomocą zarządzania urządzeniami mobilnymi i zarządzania aplikacjami mobilnymi

Zgodnie z opisem w sekcji Rejestracja i rejestracja na etapie 4 zestaw SDK aplikacji usługi Intune będzie "rejestrować" konta zarejestrowane przez aplikację, aby konto było chronione przy użyciu zasad. Konto staje się zarządzane po pomyślnym zakończeniu tej rejestracji, a zasady zarządzania aplikacjami mobilnymi powinny być teraz stosowane do tego konta.

Termin "rejestracja" może również odnosić się do procesu inicjowanego przez użytkownika końcowego w celu włączenia zarządzania urządzeniami (MDM). Rejestracja w usłudze MDM jest całkowicie oddzielona od rejestracji zasad ochrony aplikacji.

Aplikacja zintegrowana z zestawem SDK może mieć konto zarejestrowane dla zasad ochrony aplikacji bez rejestrowania tego konta na potrzeby zarządzania urządzeniami. Podobnie użytkownik może zarejestrować urządzenie do zarządzania urządzeniami bez konieczności używania aplikacji zintegrowanych z zestawem SDK z kontami zarejestrowanymi na potrzeby zasad ochrony aplikacji.

Zazwyczaj gdy deweloperzy i administratorzy odwołują się do rejestracji, odwołują się do rejestracji w usłudze MDM, ponieważ rejestracja zasad ochrony aplikacji jest w dużej mierze niewidoczna zarówno dla deweloperów, jak i użytkowników końcowych. Aby uzyskać więcej informacji na temat rejestracji w rozwiązaniu MDM, zobacz Rejestrowanie urządzeń z systemem Android .

Porady dotyczące integracji

Omówienie dzienników portalu firmy

Dzienniki portalu firmy zawierają informacje używane przez inżynierów firmy Microsoft do badania problemów. Niektóre dzienniki mogą być przydatne również dla deweloperów integrujących zestaw SDK.

W szczególności plik DiagnosticsInfo-scrubbed.log zawiera informacje o tym, jakie aplikacje są zarządzane przez zarządzanie aplikacjami mobilnymi i szczegóły zasad zarządzania aplikacjami mobilnymi w PolicyDB Information sekcji. Każda zarządzana aplikacja ma wpis w PolicyDB Information sekcji. W tym miejscu należy poszukać nazwy pakietu aplikacji, aby potwierdzić, że zasady zarządzania aplikacjami mobilnymi są prawidłowo ukierunkowane na twoją aplikację. Jeśli nie widzisz tutaj nazwy pakietu aplikacji, oznacza to, że zalogowane konto nie ma zastosowanych zasad zarządzania aplikacjami mobilnymi.

Opis poszczególnych ustawień zasad zarządzania aplikacjami mobilnymi można znaleźć w temacie Ustawienia zasad ochrony aplikacji systemu Android w usłudze Microsoft Intune. Opis sposobu wyświetlania tych ustawień w dziennikach Portal firmy można znaleźć w temacie Przeglądanie dzienników ochrony aplikacji klienckich. Jeśli zasady zarządzania aplikacjami mobilnymi nie są wymuszane zgodnie z oczekiwaniami, zalecamy sprawdzenie dzienników portalu firmy lub interfejsu użytkownika diagnostyki, sprawdzenie, czy aplikacja jest zarządzana przez zasady zarządzania aplikacjami mobilnymi, i potwierdzenie, że ustawienia zasad mają oczekiwane wartości.

Dzienniki portalu firmy można zbierać na jeden z następujących sposobów:

  • Za pośrednictwem Portalu firmy
    • Otwieranie aplikacji Portal firmy
    • Wybierz menu z trzema kropkami w prawym górnym rogu
    • Wybierz pozycję Ustawienia
    • W obszarze Dzienniki diagnostyczne wybierz pozycję Zapisz dzienniki
    • Postępuj zgodnie z monitem, aby wybrać katalog wyjściowy, aby zapisać dzienniki portalu firmy.
    • Użyj adb shell pull polecenia , aby ściągnąć dzienniki z urządzenia z systemem Android na komputer lokalny.
  • [Użyj przeglądarki Microsoft Edge dla systemu Android, aby uzyskać dostęp do dzienników aplikacji zarządzanych]. Spowoduje to wyświetlenie interfejsu użytkownika do zbierania dzienników portalu firmy i wyświetlania diagnostyki zarządzania aplikacjami mobilnymi.
  • Wywołaj polecenie MAMPolicyManager.showDiagnostics(context) , aby wyświetlić ten sam interfejs użytkownika do zbierania dzienników portalu firmy.

Szybkie testowanie przy użyciu zmieniających się zasad

Podczas opracowywania i testowania integracji aplikacji z zestawem SDK aplikacji usługi Intune można często zmieniać ustawienia zasad ochrony aplikacji dla użytkownika testowego.

Domyślnie zintegrowane aplikacje będą sprawdzać w usłudze Intune zaktualizowane zasady co 30 minut, gdy są aktywne. Możesz uniknąć tego oczekiwania i wymusić zaewidencjonowanie za pośrednictwem Portalu firmy:

  1. Uruchom Portal firmy. Nie musisz się logować.
  2. Wybierz pozycję ... ikona menu.
  3. Wybierz pozycję Ustawienia.
  4. Przewiń do ustawienia o nazwie "Zasady zarządzania".
  5. Naciśnij przycisk Synchronizuj.

Spowoduje to natychmiastowe zaplanowanie ewidencjonowania i pobranie aktualnych zasad przeznaczonych dla twojej aplikacji i konta.

Rozwiązywanie problemów z migracją systemu AndroidX

Jeśli zintegrowano zestaw SDK aplikacji usługi Intune przed użyciem systemu AndroidX, podczas migracji do systemu AndroidX może wystąpić taki błąd:

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

Te błędy mogą wystąpić, ponieważ aplikacja odwołuje się do starszych klas pomocy technicznej zestawu SDK. Klasy obsługi zarządzania aplikacjami mobilnymi opakowują klasy obsługi systemu Android, które zostały przeniesione w systemie AndroidX. Aby zwalczyć takie błędy, zastąp wszystkie odwołania do klas obsługi zarządzania aplikacjami mobilnymi odpowiednikami systemu AndroidX. Można to osiągnąć, usuwając najpierw zależności biblioteki obsługi zarządzania aplikacjami mobilnymi z plików kompilacji narzędzia Gradle. Te wiersze będą wyglądać mniej więcej tak:

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

Następnie napraw wynikowe błędy czasu kompilacji, zastępując wszystkie odwołania do klas MAM w com.microsoft.intune.mam.client.support.v7 pakietach i com.microsoft.intune.mam.client.support.v4 ich odpowiednikami systemu AndroidX. Na przykład odwołania do MAMAppCompatActivity powinny zostać zmienione na elementy systemu AndroidX AppCompatActivity. Jak wspomniano powyżej, wtyczka/narzędzie kompilacji MAM automatycznie ponownie zapisze klasy w bibliotekach Systemu AndroidX przy użyciu odpowiednich odpowiedników mam w czasie kompilacji.

Ograniczenia i przypadki specjalne

Rejestracja domyślna

Aplikacja może alternatywnie zarejestrować się w celu programowania zasad ochrony aplikacji w uproszczonym procesie nazywanym rejestracją domyślną. Ta funkcja służy przede wszystkim do obsługi prywatnych aplikacji biznesowych, które nie zintegrowały biblioteki MSAL.

Ostrzeżenie

Rejestracja domyślna ma znaczące kompromisy i nie jest zalecana. Aplikacje korzystające z rejestracji domyślnej nie obsługują dostępu warunkowego, nie korzystają z logowania jednokrotnego w usługach firmy Microsoft i nie mogą być używane przez konta spoza usługi Intune. Jeśli aplikacja jest dostarczana do publicznego sklepu z aplikacjami, rejestracja domyślna nie jest obsługiwana.

Rejestracja domyślna wymusi na użytkowniku końcowym zainstalowanie portalu firmy i ukończenie przepływu rejestracji mam przed zezwoleniem użytkownikom na korzystanie z aplikacji.

Uwaga

Rejestracja domyślna to suwerenna funkcja cloud aware.

Włącz rejestrację domyślną, wykonując następujące czynności:

  1. Jeśli aplikacja integruje usługę MSAL lub musisz włączyć logowanie jednokrotne, skonfiguruj bibliotekę MSAL. Jeśli nie, możesz pominąć ten krok.

  2. Włącz rejestrację domyślną, dodając następującą wartość w manifeście pod tagiem <application> :

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Włącz zasady zarządzania aplikacjami mobilnymi wymagane przez dodanie następującej wartości w manifeście pod tagiem <application> :

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

Procesy izolowane

Zestaw SDK aplikacji usługi Intune nie może stosować ochrony do izolowanych procesów. Obsługa izolowanych procesów (android:isolatedProcess) wymaga dodania tagu metadanych poniżej.

Ostrzeżenie

Dodając te metadane, aplikacja deklaruje, że izolowany proces nie może uwidoczniać danych organizacji. Twoja aplikacja jest odpowiedzialna za zagwarantowanie tego.

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

Niestandardowe ograniczenia przechwytywania ekranu

Jeśli aplikacja zawiera niestandardową funkcję przechwytywania ekranu, która pomija ograniczenia na poziomie FLAG_SECURE systemu Android, przed zezwoleniem na pełny dostęp do tej funkcji należy sprawdzić zasady przechwytywania Windowekranu. Jeśli na przykład aplikacja używa niestandardowego aparatu renderowania do renderowania bieżącego widoku w pliku PNG, należy najpierw sprawdzić .AppPolicy.getIsScreenCaptureAllowed()

Jeśli aplikacja nie zawiera żadnych niestandardowych lub innych funkcji przechwytywania ekranu, nie musisz podejmować żadnych działań w celu ograniczenia przechwytywania ekranu. Zasady przechwytywania ekranu są automatycznie wymuszane na Window poziomie wszystkich zintegrowanych aplikacji mam.

Wszelkie próby przechwycenia Window pliku w aplikacji przez system operacyjny lub inną aplikację zostaną zablokowane zgodnie z wymaganiami. Jeśli na przykład użytkownik spróbuje przechwycić ekran aplikacji za pomocą wbudowanych funkcji zrzutu ekranu lub nagrywania ekranu systemu Android, przechwytywanie zostanie automatycznie ograniczone bez udziału aplikacji.

Ograniczenia wymuszania zasad

  • Korzystanie z funkcji rozpoznawania zawartości: zasady "transferu lub odbierania" usługi Intune mogą blokować lub częściowo blokować użycie programu rozpoznawania zawartości w celu uzyskania dostępu do dostawcy zawartości w innej aplikacji. Spowoduje to, że ContentResolver metody będą zwracać wartość null lub zgłaszać wartość błędu (na przykład openOutputStream w FileNotFoundException przypadku zablokowania). Aplikacja może określić, czy błąd zapisu danych za pośrednictwem programu rozpoznawania zawartości był spowodowany przez zasady (lub może być spowodowany przez zasady), wykonując wywołanie:

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

    lub jeśli nie ma skojarzonego działania:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    W tym drugim przypadku aplikacje z wieloma tożsamościami muszą zadbać o odpowiednie ustawienie tożsamości wątku (lub przekazanie jawnej tożsamości do getPolicyForIdentity wywołania).

Wyeksportowane usługi

Plik AndroidManifest.xml zawarty w zestawie SDK aplikacji usługi Intune zawiera właściwość MAMNotificationReceiverService, która musi być wyeksportowana, aby umożliwić portalowi firmy wysyłanie powiadomień do zarządzanej aplikacji. Usługa sprawdza obiekt wywołujący, aby upewnić się, że tylko portal firmy może wysyłać powiadomienia.

Ograniczenia odbicia

Niektóre klasy podstawowe mam (na przykład MAMActivity, MAMDocumentsProvider) zawierają metody (oparte na oryginalnych klasach bazowych systemu Android), które używają typów parametrów lub zwracanych tylko powyżej niektórych poziomów interfejsu API. Z tego powodu nie zawsze może być możliwe użycie odbicia w celu wyliczenia wszystkich metod składników aplikacji. To ograniczenie nie jest ograniczone do zarządzania aplikacjami mobilnymi. Jest to to to samo ograniczenie, które miałoby zastosowanie, gdyby sama aplikacja zaimplementowana te metody z klas bazowych systemu Android.

Robolectric

Testowanie zachowania zestawu SDK aplikacji usługi Intune w obszarze Robolectric nie jest obsługiwane. Istnieją znane problemy z uruchamianiem zestawu SDK w obszarze Robolectric ze względu na zachowania występujące w obszarze Robolectric, które nie naśladują dokładnie tych na rzeczywistych urządzeniach lub w emulatorach.

Jeśli musisz przetestować aplikację w obszarze Robolectric, zalecanym obejściem jest przeniesienie logiki klasy aplikacji do pomocnika i utworzenie apk testów jednostkowych za pomocą klasy aplikacji, która nie dziedziczy po aplikacji MAMApplication.