Zestaw SDK aplikacji usługi Intune dla systemu Android — funkcje uczestnictwa w aplikacji

Zestaw SDK aplikacji 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ą.

Uwaga

Ten przewodnik jest podzielony na kilka odrębnych etapów. Zacznij od zapoznania się z artykułem Planowanie integracji.

Etap 7. Funkcje uczestnictwa w aplikacji

Goals etapów

  • Dowiedz się więcej o różnych funkcjach uczestnictwa aplikacji oferowanych przez zestaw SDK aplikacji usługi Intune.
  • Integrowanie funkcji uczestnictwa aplikacji odpowiednich dla aplikacji i użytkowników.
  • Przetestuj integrację tych funkcji.

Co to są "funkcje uczestnictwa w aplikacji"?

Ten proces integracji zestawu SDK próbuje zminimalizować ilość kodu specyficznego dla aplikacji, który deweloperzy muszą napisać. Po pomyślnym ukończeniu poprzednich etapów integracji zestawu SDK aplikacja może teraz wymusić większość ustawień zasad ochrony aplikacji, takich jak szyfrowanie plików, ograniczenia kopiowania/wklejania, blokowanie zrzutów ekranu i ograniczenia transferu danych.

Istnieją jednak pewne ustawienia, które wymagają prawidłowego wymuszania kodu specyficznego dla aplikacji. są one nazywane funkcjami uczestnictwa w aplikacji. Zazwyczaj zestaw SDK nie ma wystarczającego kontekstu dotyczącego kodu aplikacji lub scenariusza użytkownika końcowego, aby automatycznie wymusić te ustawienia, a tym samym zależy od deweloperów, aby odpowiednio wywoływać interfejsy API zestawu SDK.

Funkcje uczestnictwa w aplikacji niekoniecznie są opcjonalne. W zależności od istniejących funkcji aplikacji te funkcje mogą być wymagane. Aby uzyskać szczegółowe informacje , zobacz Kluczowe decyzje dotyczące integracji zestawu SDK .

W poprzednich etapach tego przewodnika opisano już kilka funkcji uczestnictwa w aplikacji:

W pozostałej części tego przewodnika opisano pozostały zestaw funkcji uczestnictwa w aplikacji:

  • Wymuszaj zasady ograniczające zapisywanie plików do/otwieranie plików z magazynu lokalnego lub w chmurze.
  • Wymuszanie zasad ograniczających zawartość w powiadomieniach.
  • Wymuszanie zasad ochrony danych kopii zapasowych.
  • Wymuszanie zasad ograniczających przechwytywanie ekranu (jeśli aplikacja ma niestandardowy kod przechwytywania ekranu).
  • Obsługa urzędu certyfikacji ochrony aplikacji.
  • Zarejestruj się, aby otrzymywać powiadomienia z zestawu SDK.
  • Stosowanie niestandardowych elementów aplikacji.
  • Użyj zaufanych certyfikatów z usługi Intune, aby zapewnić łańcuch zaufania do lokalnych punktów końcowych.

Podstawy funkcji uczestnictwa w aplikacji

Interfejs AppPolicy zawiera wiele metod, które informują aplikację, czy niektóre akcje są dozwolone.

Większość funkcji uczestnictwa w aplikacji obejmuje:

  • Identyfikowanie właściwego miejsca w kodzie aplikacji w celu sprawdzenia, czy akcja jest dozwolona.
  • Wywoływanie metody w AppPolicy celu sprawdzenia, czy akcja jest dozwolona, na podstawie aktualnie skonfigurowanych zasad.
  • W zależności od wyniku możesz zezwolić na ukończenie akcji lub zmodyfikować zachowanie aplikacji, gdy akcja zostanie zablokowana.

Aby pobrać wystąpienie AppPolicy , użyj jednej z metod MAMPolicyManager , takich jak getPolicy lub getPolicyForIdentity(final String identity).

Metody informacyjne w usłudze AppPolicy

Nie każda metoda w programie AppPolicy jest powiązana z funkcją uczestnictwa w aplikacji. Niektóre metody są informacyjne, podając dane aplikacji, na których zasady są obecnie skonfigurowane, nawet jeśli te zasady są automatycznie wymuszane przez zestaw SDK. Te metody istnieją, aby umożliwić aplikacji prezentowanie niestandardowego środowiska użytkownika podczas konfigurowania określonych zasad.

Przykład: określ, czy zrzuty ekranu są blokowane

Jeśli aplikacja ma kontrolkę, która umożliwia użytkownikowi wykonywanie zrzutu ekranu, możesz wyłączyć lub ukryć tę kontrolkę, jeśli zasady ochrony aplikacji mają zablokowane zrzuty ekranu.

Aplikacja może to sprawdzić, wywołując polecenie MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Zasady dotyczące ograniczania transferu danych między aplikacjami a lokalizacjami magazynu urządzeń lub chmury

Wiele aplikacji umożliwia użytkownikowi końcowemu zapisywanie danych lub otwieranie danych z lokalnego magazynu plików lub usług magazynu w chmurze. Zestaw SDK aplikacji usługi Intune umożliwia administratorom IT ochronę przed przepływem danych i wyciekiem danych przez ograniczenie miejsca, w którym aplikacje mogą zapisywać dane i otwierać dane.

Uwaga

Jeśli aplikacja zezwala na zapisywanie w lokalizacjach osobistych lub w chmurze bezpośrednio z aplikacji lub zezwala na bezpośrednie otwieranie danych w aplikacji, należy zaimplementować tę funkcję udziału aplikacji zestawu SDK aplikacji usługi Intune, aby umożliwić administratorom IT blokowanie zapisywania/otwierania.

Zapisywanie w magazynie urządzenia lub chmury

Interfejs getIsSaveToLocationAllowed API informuje aplikację, czy zapisywanie w określonych lokalizacjach jest dozwolone dla danej tożsamości na podstawie skonfigurowanych zasad:

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(
SaveLocation service, String username);

Aby określić, czy aplikacja powinna zaimplementować getIsSaveToLocationAllowed sprawdzanie, ustal, czy aplikacja obsługuje ruch wychodzący danych, przeglądając następującą tabelę:

service Parametr: SaveLocation Wartość wyliczenia Przypadek użycia Skojarzona nazwa użytkownika
ONEDRIVE_FOR_BUSINESS Aplikacja zapisuje dane w usłudze OneDrive. A username dla konta, które jest używane zarówno do uwierzytelniania usługi w chmurze, jak i uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
SHAREPOINT Aplikacja zapisuje dane w programie Sharepoint. A username dla konta, które jest używane zarówno do uwierzytelniania usługi w chmurze, jak i uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
BOX Ta aplikacja zapisuje dane w usłudze Box. A username dla konta, które jest używane zarówno do uwierzytelniania usługi w chmurze, jak i uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
LOCAL Aplikacja zapisuje dane w zewnętrznej lokalizacji magazynu na urządzeniu, które nie jest magazynem prywatnym aplikacji. Magazyn zewnętrzny nie jest uważany za usługę w chmurze, dlatego zawsze powinien być używany z parametrem nazwy null użytkownika.
PHOTO_LIBRARY Aplikacja zapisuje dane w lokalnym magazynie zdjęć systemu Android. Lokalny magazyn zdjęć systemu Android nie jest uważany za usługę w chmurze, dlatego zawsze powinien być używany z parametrem nazwy null użytkownika.
ACCOUNT_DOCUMENT Aplikacja zapisuje dane w lokalizacji skojarzonej z kontem w aplikacji i nie jest jedną z określonych lokalizacji w chmurze określonych powyżej. *Ta lokalizacja powinna służyć do określania, czy dane mogą być przekazywane między kontami w aplikacji z wieloma tożsamościami.- A username dla konta, które jest używane do uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
OTHER Aplikacja zapisuje dane w lokalizacji, która nie została określona powyżej i nie spełnia kryteriów dla ACCOUNT_DOCUMENTprogramu . Wartość username nie jest oceniana dla tej lokalizacji i tak powinno być null.

Pliki umieszczone w magazynie aplikacji prywatnych, które są niezbędne do działania aplikacji lub pobrane tymczasowo do wyświetlania, są zawsze dozwolone; Nie musisz sprawdzać .getIsSaveToLocationAllowed Sprawdź, czy SaveLocation.LOCAL

  1. Pliki zapisane poza magazynem aplikacji prywatnych.
  2. Pliki pobrane do magazynu aplikacji prywatnych, które nie są niezbędne do działania aplikacji (na przykład użytkownik celowo decyduje się pobrać na urządzenie).

Uwaga

Podczas sprawdzania zasad username zapisywania powinna być nazwą UPN/nazwą użytkownika/wiadomością e-mail skojarzoną z usługą w chmurze, która jest zapisywana w usłudze w chmurze (niekoniecznie taka sama jak konto będące właścicielem zapisanego dokumentu).

Otwieranie danych z lokalnej lub chmurowej lokalizacji magazynu

Interfejs getIsOpenFromLocationAllowed API informuje aplikację, czy otwieranie z określonych lokalizacji jest dozwolone dla danej tożsamości na podstawie skonfigurowanych zasad:

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowed(
OpenLocation location, String username);

Aby ustalić, czy aplikacja powinna zaimplementować getIsOpenFromLocationAllowed sprawdzanie, ustal, czy aplikacja obsługuje ruch przychodzący danych, przeglądając następującą tabelę:

location Parametr: OpenLocation Wartość wyliczenia Przypadek użycia Skojarzona nazwa użytkownika
ONEDRIVE_FOR_BUSINESS Aplikacja otwiera dane z usługi OneDrive. A username dla konta, które jest używane zarówno do uwierzytelniania usługi w chmurze, jak i uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
SHAREPOINT Aplikacja otwiera dane z programu Sharepoint. A username dla konta, które jest używane zarówno do uwierzytelniania usługi w chmurze, jak i uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
CAMERA Aplikacja otwiera dane z aparatu. Wartość null , ponieważ aparat urządzenia nie jest usługą w chmurze.
LOCAL Aplikacja otwiera dane z zewnętrznej lokalizacji magazynu na urządzeniu, które nie jest magazynem prywatnym aplikacji. Chociaż magazyn zewnętrzny nie jest lokalizacją usługi w chmurze, parametr jest oczekiwany, username ponieważ wskazuje własność.
Podczas otwierania pliku z magazynu lokalnego należy zawsze rozważyć właściciela pliku, ponieważ zasady zapisywania jako właściciela pliku mogą lub nie mogą zezwalać innym tożsamościom na otwieranie pliku:
- W przypadku plikówusername oznaczonych tożsamościami powinna być tożsamością właściciela pliku.
- W przypadku plików bez taguusername tożsamości powinien mieć wartość null.
PHOTO_LIBRARY Aplikacja otwiera dane z lokalnego magazynu zdjęć systemu Android. Lokalny magazyn zdjęć systemu Android nie jest uważany za usługę w chmurze, dlatego zawsze powinien być używany z parametrem nazwy null użytkownika.
ACCOUNT_DOCUMENT Aplikacja otwiera dane z lokalizacji skojarzonej z kontem w aplikacji i nie jest jedną z określonych lokalizacji w chmurze określonych powyżej. *Ta lokalizacja powinna służyć do określania, czy dane mogą być przekazywane między kontami w aplikacji z wieloma tożsamościami.- A username dla konta, które jest używane do uwierzytelniania Microsoft Entra. Jeśli taka nazwa użytkownika nie istnieje lub nazwa użytkownika nie jest znana, użyj polecenia null.
OTHER Aplikacja otwiera dane z lokalizacji, która nie została określona powyżej i nie spełnia kryteriów dla ACCOUNT_DOCUMENTprogramu . Wartość username nie jest oceniana dla tej lokalizacji i tak powinno być null.

Uwaga

Podczas sprawdzania otwartych zasad username powinna być nazwą UPN/nazwą użytkownika/wiadomością e-mail skojarzoną z otwieranym plikiem lub usługą w chmurze (niekoniecznie taką samą jak konto otwierające dokument).

Porada

Dla wygody zestaw SDK udostępnia metodę AppPolicy.isOpenFromLocalStorageAllowed , która przyjmuje File parametr pliku w magazynie lokalnym. Warunki wymuszania zasad są funkcjonalnie identyczne z wywołaniem AppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username) , z tą różnicą, że obsługują analizę właściciela username pliku z obiektu File.

Okno dialogowe udostępnianie zablokowane

Zestaw SDK udostępnia okno dialogowe powiadamiania użytkownika, że akcja transferu danych została zablokowana przez zasady zarządzania aplikacjami mobilnymi.

Okno dialogowe powinno być wyświetlane użytkownikowi za każdym razem, gdy wywołanie interfejsu isSaveToAllowedForLocation API lub isOpenFromAllowedForLocation spowoduje zablokowanie akcji zapisywania/otwierania. W oknie dialogowym zostanie wyświetlony ogólny komunikat i po odrzuceniu nastąpi powrót do wywołania Activity .

Aby wyświetlić okno dialogowe, dodaj następujący kod:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Zezwalaj na udostępnianie plików

Jeśli zapisywanie w publicznych lokalizacjach magazynu nie jest dozwolone, aplikacja powinna nadal zezwalać użytkownikowi na wyświetlanie plików, pobierając je do prywatnego magazynu aplikacji , a następnie otwierając je za pomocą modułu wyboru systemu.

Zasady ograniczania zawartości w powiadomieniach

W przypadku aplikacji z jedną tożsamością domyślne zachowanie zestawu SDK aplikacji usługi Intune spowoduje próbę zablokowania wszystkich powiadomień, gdy zasady ochrony aplikacji ograniczą powiadomienia.

Domyślne zachowanie zestawu SDK jest ograniczone. Zestaw SDK nie może automatycznie honorować wartości "Blokuj dane organizacji", która ma na celu usunięcie tylko zawartości zarządzanej z powiadomień. W przypadku aplikacji z wieloma tożsamościami zestaw SDK nie może określić, które powiadomienia zawierają zarządzaną zawartość.

Jeśli aplikacja wyświetla powiadomienia i ma wiele tożsamości i/lub chce uwzględnić wartość "Blokuj dane organizacji", przed wyświetleniem powiadomienia musi sprawdzić zasady ograniczeń powiadomień dla konta skojarzonego z powiadomieniem.

Aby ustalić, czy zasady są wymuszane, wykonaj następujące wywołanie:

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

Zwrócone wyliczenie NotificationRestriction ma następujące wartości:

NotificationRestriction Enum Oczekiwane zachowanie aplikacji
BLOCKED Aplikacja nie może wyświetlać żadnych powiadomień dotyczących konta skojarzonego z tą zasadą. W przypadku aplikacji z jedną tożsamością zestaw SDK aplikacji usługi Intune automatycznie zablokuje wszystkie powiadomienia i nie jest wymagany żaden dodatkowy kod.
BLOCK_ORG_DATA Aplikacja musi wyświetlać zmodyfikowane powiadomienie, które nie zawiera danych organizacji.
UNRESTRICTED Aplikacja powinna wyświetlać wszystkie powiadomienia.

Jeśli aplikacja nie wywołuje getNotificationRestrictionpoprawnie, zestaw SDK zarządzania aplikacjami mobilnymi dołożą wszelkich starań, aby automatycznie ograniczyć powiadomienia tylko dla aplikacji z jedną tożsamością.

W takim przypadku BLOCK_ORG_DATA jest traktowane tak samo jak BLOCKED i powiadomienie nie będzie w ogóle wyświetlane.

Aby uzyskać bardziej szczegółową kontrolę, sprawdź wartość i odpowiednio zmodyfikuj getNotificationRestriction powiadomienia aplikacji.

Zasady ochrony danych kopii zapasowych

Zestaw SDK aplikacji usługi Intune może blokować przekazywanie danych do wbudowanej funkcji tworzenia i przywracania kopii zapasowych systemu Android. Aby dowiedzieć się więcej na temat tworzenia kopii zapasowych i przywracania w systemie Android, zobacz Przewodnik po interfejsie API systemu Android oraz zmiany wprowadzone w systemie Android S/12 tutaj: Zmień na kopię zapasową i przywracanie.

Automatyczna kopia zapasowa dla aplikacji

Począwszy od systemu Android M, system Android zaczął oferować automatyczne pełne kopie zapasowe na dysku Google dla aplikacji, niezależnie od docelowego interfejsu API aplikacji.

Usługa Intune umożliwia korzystanie ze wszystkich funkcji automatycznego wycofywania dostępnych w systemie Android, w tym możliwości definiowania reguł niestandardowych w języku XML, z określonymi wskazówkami dotyczącymi integracji usługi Intune w celu zapewnienia stosowania ochrony danych.

Konfigurowanie zachowania kopii zapasowej w manifeście aplikacji

Domyślnie jest ustawiona android:allowBackup wartość true zgodnie z opisem w temacie Włączanie i wyłączanie kopii zapasowej.

Jeśli aplikacja nie wymaga pełnej funkcji tworzenia kopii zapasowych i przywracania, ustaw wartość android:allowBackupfalse. W takim przypadku nie trzeba wykonywać żadnych dalszych działań, a dane "firmowe" pozostaną w aplikacji.

Jeśli aplikacja wymaga pełnej funkcji tworzenia kopii zapasowych i przywracania, ustaw wartość android:allowBackuptrue i wykonaj następujące dodatkowe kroki:

  1. Jeśli aplikacja nie używa własnych niestandardowych BackupAgentelementów , użyj domyślnego elementu MAMBackupAgent , aby zezwolić na automatyczne wykonywanie pełnych kopii zapasowych zgodnych z zasadami usługi Intune. W manifeście aplikacji umieść następujące elementy:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [Opcjonalnie] Jeśli zaimplementowano opcjonalny niestandardowy BackupAgentelement , upewnij się, że używasz funkcji MAMBackupAgent lub MAMBackupAgentHelper. Zobacz następujące sekcje. Rozważ przełączenie się do korzystania z funkcji MAMDefaultBackupAgent usługi Intune opisanej w kroku 1, który zapewnia łatwe tworzenie kopii zapasowej w systemie Android M i nowszych wersjach.

  3. Jeśli zdecydujesz, który typ pełnej kopii zapasowej aplikacja powinna otrzymać (niefiltrowana, filtrowana lub żadna), musisz ustawić atrybut android:fullBackupContent na wartość true, false lub zasób XML w aplikacji.

  4. Następnie należy skopiować wartość elementu do android:fullBackupContent tagu com.microsoft.intune.mam.FullBackupContent metadanych i dla aplikacji, które obsługują nowy format konfiguracji XML dodany w interfejsie API 31, do tagu com.microsoft.intune.mam.DataExtractionRules metadanych.

    • Przykład 1: Jeśli chcesz, aby aplikacja miała pełne kopie zapasowe bez wykluczeń, musisz ustawić wartość true atrybutów i tagów metadanych:

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • Przykład 2: Jeśli chcesz, aby aplikacja korzystała z jej niestandardowych BackupAgent i nie korzystała z pełnych, zgodnych z zasadami usługi Intune automatycznych kopii zapasowych, musisz ustawić atrybuty i tagi metadanych na wartość false:

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • Przykład 3: Jeśli chcesz, aby aplikacja miała pełne kopie zapasowe zgodnie z regułami niestandardowymi zdefiniowanymi w pliku XML, ustaw atrybut i tag metadanych na ten sam zasób XML:

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

Kopia zapasowa klucz/wartość

Opcja Kopia zapasowa klucz/wartość jest dostępna dla wszystkich interfejsów API 8+ i przekazuje dane aplikacji do usługi kopii zapasowej systemu Android. Ilość danych na aplikację jest ograniczona do 5 MB. Jeśli używasz kopii zapasowej klucz/wartość, należy użyć backupAgentHelper lub BackupAgent.

BackupAgentHelper

BackupAgentHelper jest łatwiejszy do zaimplementowania niż BackupAgent zarówno pod względem natywnej funkcjonalności systemu Android, jak i integracji zarządzania aplikacjami mobilnymi usługi Intune BackupAgentHelper umożliwia deweloperowi zarejestrowanie całych plików i preferencji udostępnionych odpowiednio do FileBackupHelper i SharedPreferencesBackupHelper (odpowiednio), które są następnie dodawane do klasy BackupAgentHelper po utworzeniu. Wykonaj poniższe kroki, aby użyć narzędzia BackupAgentHelper z funkcją zarządzania aplikacjami mobilnymi usługi Intune:

  1. Aby korzystać z kopii zapasowej z wieloma tożsamościami za pomocą polecenia , postępuj zgodnie z przewodnikiem BackupAgentHelperdla systemu Android dotyczącym rozszerzania kopii zapasowejAgentHelper.

  2. Aby klasa rozszerzała odpowiednik funkcji MAM BackupAgentHelper, FileBackupHelper i SharedPreferencesBackupHelper.

Klasa systemu Android Odpowiednik funkcji MAM
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Wykonanie tych wytycznych spowoduje pomyślne utworzenie kopii zapasowej i przywrócenie wielu tożsamości.

BackupAgent

Element BackupAgent umożliwia znacznie bardziej wyraźne określenie, jakie dane są tworzone w kopii zapasowej. Ponieważ deweloper jest sprawiedliwie odpowiedzialny za implementację, istnieje więcej kroków wymaganych do zapewnienia odpowiedniej ochrony danych z usługi Intune. Ponieważ większość pracy jest wypychana do Ciebie, deweloper, integracja z usługą Intune jest nieco bardziej zaangażowana.

Integracja zarządzania aplikacjami mobilnymi:

  1. Uważnie przeczytaj przewodnik dla systemu Android dotyczący tworzenia kopii zapasowej klucza/wartości , a w szczególności rozszerzenia BackupAgent, aby upewnić się, że implementacja BackupAgent jest zgodna z wytycznymi systemu Android.

  2. Rozszerz klasę MAMBackupAgent.

Kopia zapasowa z wieloma tożsamościami:

  1. Przed rozpoczęciem tworzenia kopii zapasowej sprawdź, czy pliki lub bufory danych, których kopię zapasową planujesz utworzyć, są rzeczywiście dozwolone przez administratora IT do tworzenia kopii zapasowych w scenariuszach obejmujących wiele tożsamości. Użyj funkcji isBackupAllowedMAMFileProtectionManager i MAMDataProtectionManager , aby to określić. Jeśli nie można utworzyć kopii zapasowej pliku lub buforu danych, nie należy dołączać go do kopii zapasowej.

  2. W pewnym momencie podczas tworzenia kopii zapasowej, jeśli chcesz utworzyć kopię zapasową tożsamości dla plików zaewidencjonowanych w kroku 1, musisz wywołać z backupMAMFileIdentity(BackupDataOutput data, File … files) plikami, z których planujesz wyodrębnić dane. Spowoduje to automatyczne utworzenie nowych jednostek kopii zapasowych i zapisanie BackupDataOutput ich dla Ciebie. Te jednostki zostaną automatycznie użyte podczas przywracania.

Przywracanie wielu tożsamości: Przewodnik tworzenia kopii zapasowej danych określa ogólny algorytm przywracania danych aplikacji i udostępnia przykład kodu w sekcji Extending BackupAgent (Rozszerzanie klasy BackupAgent ). Aby pomyślnie przywrócić wiele tożsamości, należy postępować zgodnie z ogólną strukturą udostępnioną w tym przykładzie kodu ze szczególną uwagą na następujące kwestie:

  1. Aby przejść przez jednostki kopii zapasowej, musisz użyć while(data.readNextHeader())pętli *.

  2. Jeśli klucz nie jest zgodny z kluczem napisanym w programie onBackup, musisz wywołać polecenie data.getKey()data.skipEntityData() . Bez wykonania tego kroku przywracanie może zakończyć się niepowodzeniem.

  3. Unikaj zwracania podczas korzystania z jednostek kopii zapasowych w while(data.readNextHeader())konstrukcji *, ponieważ jednostki, które automatycznie zapisujemy, zostaną utracone.

  • Gdzie data jest nazwa zmiennej lokalnej dla MAMBackupDataInput , która jest przekazywana do aplikacji po przywróceniu.

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()

Uwaga

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.

Obsługa urzędu certyfikacji ochrony aplikacji

Urząd certyfikacji ochrony aplikacji (dostęp warunkowy), znany również jako urząd certyfikacji oparty na aplikacji, ogranicza dostęp do zasobów, dopóki aplikacja nie będzie zarządzana przez zasady ochrony aplikacji usługi Intune. Microsoft Entra identyfikator wymusza to, wymagając zarejestrowania aplikacji i zarządzania przez aplikację przed udzieleniem tokenu w celu uzyskania dostępu do chronionego zasobu urzędu certyfikacji.

Uwaga

Obsługa urzędu certyfikacji usługi App Protection wymaga wersji 1.0.0 (lub nowszej) biblioteki MSAL.

Obsługa niezgodności za pomocą biblioteki MSAL

Podczas uzyskiwania tokenu dla konta biblioteka MSAL może zwrócić lub zgłosić MsalIntuneAppProtectionPolicyRequiredException element w celu wskazania niezgodności z zarządzaniem zasadami ochrony aplikacji. Dodatkowe parametry można wyodrębnić z wyjątku do użycia w korygowaniu zgodności (zobacz MAMComplianceManager). Po pomyślnym skorygowaniu aplikacja może ponownie rozłączyć pozyskiwanie tokenu za pośrednictwem biblioteki MSAL.

MAMComplianceManager

Interfejs MAMComplianceManager jest używany po odebraniu błędu wymaganego przez zasady z biblioteki MSAL. Zawiera metodę [remediateCompliance], która powinna zostać wywołana w celu podjęcia próby wprowadzenia aplikacji w stan zgodny. Odwołanie do elementu MAMComplianceManager można uzyskać w następujący sposób:

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

Zwrócone MAMComplianceManager wystąpienie ma gwarancję, że nie będzie mieć wartości null.

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

Metoda remediateCompliance() jest wywoływana w celu podjęcia próby umieszczenia aplikacji w zarządzaniu w celu spełnienia warunków Microsoft Entra identyfikatora w celu przyznania żądanego tokenu. Pierwsze cztery parametry można wyodrębnić z wyjątku odebranego przez metodę MSAL AuthenticationCallback.onError() (zobacz przykład kodu poniżej). Końcowy parametr jest wartością logiczną, która kontroluje, czy środowisko użytkownika jest wyświetlane podczas próby zgodności.

remediateCompliance Wyświetla proste okno dialogowe postępu blokowania, dzięki czemu aplikacje nie muszą wyświetlać dostosowanego środowiska użytkownika podczas tej operacji. To okno dialogowe będzie wyświetlane tylko wtedy, gdy trwa korygowanie zgodności. Wynik końcowy nie zostanie wyświetlony. Aplikacja może zarejestrować odbiornik dla COMPLIANCE_STATUS powiadomienia, aby obsłużyć powodzenie lub niepowodzenie próby skorygowania zgodności. Aby uzyskać szczegółowe informacje, zobacz Powiadomienia o stanie zgodności .

remediateCompliance() może zainicjować rejestrację mam w ramach ustanawiania zgodności. Aplikacja może otrzymać powiadomienie o rejestracji, jeśli zarejestrowała odbiorcę powiadomień o rejestracji. Zarejestrowana MAMServiceAuthenticationCallback aplikacja będzie mieć wywołaną acquireToken() metodę w celu uzyskania tokenu dla rejestracji. acquireToken() Zostanie wywołane przed uzyskaniem przez aplikację własnego tokenu, więc wszelkie zadania tworzenia księgowości lub tworzenia konta, które aplikacja wykonuje po pomyślnym uzyskaniu tokenu, mogą jeszcze nie zostać wykonane. W tym przypadku wywołanie zwrotne musi mieć możliwość uzyskania tokenu.

Jeśli nie możesz zwrócić tokenu z acquireToken()programu , próba skorygowania zgodności zakończy się niepowodzeniem.

Jeśli wywołasz updateToken później z prawidłowym tokenem dla żądanego zasobu, korygowanie zgodności zostanie natychmiast ponowione przy użyciu danego tokenu.

Uwaga

Pozyskiwanie tokenu dyskretnego będzie nadal możliwe, acquireToken() ponieważ użytkownik będzie już kierował instalacją brokera i zarejestrowaniem urządzenia przed odebraniem wyjątku MsalIntuneAppProtectionPolicyRequiredException . Powoduje to, że broker ma prawidłowy token odświeżania w pamięci podręcznej, co pozwala na dyskretne przejęcie żądanego tokenu.

Oto przykład otrzymywania błędu wymaganego przez zasady w AuthenticationCallback.onError() metodzie i wywoływania elementu MAMComplianceManager w celu obsługi błędu.

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

Powiadomienia o stanie zgodności

Jeśli aplikacja zarejestruje się w celu otrzymywania powiadomień typu COMPLIANCE_STATUS, zostanie wysłana wartość MAMComplianceNotification w celu poinformowania aplikacji o ostatecznym stanie próby skorygowania zgodności. Aby uzyskać szczegółowe informacje na temat rejestrowania , zobacz Rejestrowanie powiadomień z zestawu SDK .

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

Metoda getComplianceStatus() zwraca wynik próby korygowania zgodności jako wartość z wyliczenia [MAMCAComplianceStatus].

Kod stanu Objaśnienie
UNKNOWN Stan jest nieznany. Może to wskazywać na nieprzewidaną przyczynę niepowodzenia. Dodatkowe informacje można znaleźć w dziennikach Portal firmy.
COMPLIANT Korygowanie zgodności powiodło się, a aplikacja jest teraz zgodna z zasadami. Należy ponowić próbę uzyskania tokenu MSAL.
NOT_COMPLIANT Próba skorygowania zgodności nie powiodła się. Aplikacja nie jest zgodna i nie należy ponawiać próby uzyskania tokenu MSAL, dopóki warunek błędu nie zostanie poprawiony. Dodatkowe informacje o błędzie są wysyłane za pomocą funkcji MAMComplianceNotification.
SERVICE_FAILURE Wystąpił błąd podczas próby pobrania danych zgodności z usługi Intune. Dodatkowe informacje można znaleźć w dziennikach Portal firmy.
NETWORK_FAILURE Wystąpił błąd podczas nawiązywania połączenia z usługą Intune. Aplikacja powinna ponowić próbę uzyskania tokenu po przywróceniu połączenia sieciowego.
CLIENT_ERROR Próba skorygowania zgodności nie powiodła się z jakiegoś powodu związanego z klientem. Na przykład brak tokenu ani niewłaściwego użytkownika. Dodatkowe informacje o błędzie są wysyłane za pomocą funkcji MAMComplianceNotification.
PENDING Próba skorygowania zgodności nie powiodła się, ponieważ odpowiedź o stanie nie została jeszcze odebrana z usługi po przekroczeniu limitu czasu. Aplikacja powinna spróbować ponownie pozyskić token później.
COMPANY_PORTAL_REQUIRED Aby korygowanie zgodności zakończyło się pomyślnie, należy zainstalować Portal firmy na urządzeniu. Jeśli Portal firmy jest już zainstalowana na urządzeniu, aplikacja musi zostać ponownie uruchomiona. W takim przypadku zostanie wyświetlone okno dialogowe z prośbą o ponowne uruchomienie aplikacji przez użytkownika.

Jeśli stan zgodności to MAMCAComplianceStatus.COMPLIANT, aplikacja powinna ponownie zainicjować swoje pierwotne pozyskiwanie tokenu (dla własnego zasobu).

Jeśli próba korygowania zgodności nie powiodła się, getComplianceErrorTitle() metody i getComplianceErrorMessage() będą zwracać zlokalizowane ciągi, które aplikacja może wyświetlić użytkownikowi końcowemu, jeśli wybierze. Większość przypadków błędów nie jest korygowana przez aplikację, więc w przypadku ogólnego przypadku najlepszym rozwiązaniem może być niepowodzenie tworzenia konta lub zalogowanie się i zezwolenie użytkownikowi na późniejszą próbę.

Jeśli błąd jest trwały, dzienniki Portal firmy mogą pomóc w ustaleniu przyczyny. Użytkownik końcowy może przesłać dzienniki. Aby uzyskać więcej informacji, zobacz Przekazywanie dzienników i wysyłanie wiadomości e-mail.

Oto przykład rejestrowania odbiornika przy użyciu klasy anonimowej w celu zaimplementowania interfejsu MAMNotificationReceiver:

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
            
            // take appropriate action based on complianceNotification.getComplianceStatus()
            
            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

Uwaga

Odbiornik powiadomień musi zostać zarejestrowany przed wywołaniem, remediateCompliance() aby uniknąć warunku wyścigu, który może spowodować pominięcie powiadomienia.

Deklarowanie obsługi urzędu certyfikacji usługi App Protection

Gdy aplikacja będzie gotowa do obsługi korygowania urzędu certyfikacji aplikacji, możesz poinformować firmę Microsoft Identity, że Twoja aplikacja jest gotowa do użycia przez urząd certyfikacji aplikacji. Aby to zrobić w aplikacji MSAL, skompiluj klienta publicznego przy użyciu funkcji klienta "protapp"

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

Po wykonaniu powyższych czynności przejdź do poniższej sekcji Validating App Protection CA (Weryfikowanie urzędu certyfikacji ochrony aplikacji ).

Uwagi dotyczące implementacji

Uwaga

Metoda aplikacji MAMServiceAuthenticationCallback.acquireToken() powinna przekazać wartość false dla forceRefresh flagi do acquireTokenSilentAsync().

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

Uwaga

Jeśli chcesz pokazać niestandardowe blokowanie środowiska użytkownika podczas próby korygowania, należy przekazać wartość false dla parametru showUX na wartość remediateCompliance(). Przed wywołaniem remediateCompliance()programu należy najpierw upewnić się, że jest wyświetlane środowisko użytkownika i zarejestrować odbiornik powiadomień. Zapobiegnie to warunkowi wyścigu, w którym powiadomienie może zostać pominięte w przypadku remediateCompliance() bardzo szybkiego niepowodzenia. Na przykład onCreate() metoda lub onMAMCreate() podklasy Działania jest idealnym miejscem do zarejestrowania odbiornika powiadomień, a następnie wywołania metody remediateCompliance(). Parametry elementu remediateCompliance() można przekazać do środowiska użytkownika jako dodatki intencji. Po otrzymaniu powiadomienia o stanie zgodności możesz wyświetlić wynik lub po prostu zakończyć działanie.

Uwaga

remediateCompliance() zarejestruje konto i podejmie próbę rejestracji. Po nabyciu głównego tokenu wywołanie registerAccountForMAM() nie jest konieczne, ale nie ma w tym nic złego. Z drugiej strony, jeśli aplikacja nie uzyska tokenu i chce usunąć konto użytkownika, musi wywołać polecenie unregisterAccountForMAM() , aby usunąć konto i zapobiec ponownym próbom rejestracji w tle.

Rejestrowanie w celu otrzymywania powiadomień z zestawu SDK

W przewodniku po zestawie SDK aplikacji usługi Intune omówiono już kilka scenariuszy, w których aplikacja może być wymagana do rejestrowania się w celu otrzymywania powiadomień z zestawu SDK, takich jak:

W tej sekcji opisano każdy typ powiadomienia, które może wysyłać zestaw SDK, kiedy i dlaczego aplikacja chce go nasłuchiwać oraz jak zaimplementować odbiornik powiadomień.

Typy powiadomień

Wszystkie powiadomienia zestawu SDK implementują interfejs MAMNotification , który ma jedną funkcję , getType()zwracając wyliczenie MAMNotificationType .

Większość powiadomień to MAMUserNotifications, które zawierają informacje specyficzne dla pojedynczej tożsamości, które można pobrać za pośrednictwem getUserIdentity() funkcji.

MamEnrollmentNotification i MAMComplianceNotification dodatkowo rozszerzają MAMUserNotificationprogram , który zawiera wyniki prób zarejestrowania użytkownika/urządzenia w usłudze MAM i wynik próby skorygowania zgodności odpowiednio z urzędem certyfikacji usługi App Protection.

Typ powiadomienia Klasa powiadomień Przyczyna powiadomienia Stosowanie Porady dotyczące obsługi Informacje o wątku
COMPLIANCE_STATUS MAMComplianceNotification Zwraca wynik próby skorygowania zgodności. Aplikacje implementujące urząd certyfikacji usługi App Protection muszą to obsłużyć. - Rodzaju
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Zwraca wynik próby rejestracji. Wszystkie aplikacje otrzymają to. - Rodzaju
MANAGEMENT_REMOVED MAMUserNotification Aplikacja ma stać się niezarządzana. Aplikacje MAMDataProtectionManager , które korzystają, muszą sobie z tym poradzić. Zobacz MANAGEMENT_REMOVED poniżej. Nigdy w wątku interfejsu użytkownika
REFRESH_APP_CONFIG MAMUserNotification Wartości konfiguracji aplikacji mogły ulec zmianie. Aplikacje implementujące konfigurację aplikacji i dane konfiguracji aplikacji pamięci podręcznej muszą to obsłużyć. Aplikacje muszą unieważniać i aktualizować wszystkie dane konfiguracji aplikacji w pamięci podręcznej. Rodzaju
REFRESH_POLICY MAMUserNotification Ochrona aplikacji zasady mogły ulec zmianie. Aplikacje, które buforują zasady ochrony aplikacji, muszą to obsłużyć. Aplikacje muszą unieważniać i aktualizować wszystkie dane zasad ochrony aplikacji w pamięci podręcznej. Rodzaju
WIPE_USER_DATA MAMUserNotification Wyczyść ma miejsce (*). Aplikacje MAMDataProtectionManager , które korzystają, muszą obsłużyć tę lubWIPE_USER_AUXILIARY_DATA. Zobacz Selektywne czyszczenie. Nigdy w wątku interfejsu użytkownika
WIPE_USER_AUXILIARY_DATA MAMUserNotification Wyczyść ma miejsce (*). Otrzymają to tylko aplikacje z wieloma tożsamościami.
Aplikacje MAMDataProtectionManager , które korzystają, muszą obsłużyć tę lubWIPE_USER_DATA.
Zobacz Selektywne czyszczenie. Nigdy w wątku interfejsu użytkownika
WIPE_COMPLETED MAMUserNotification Czyszczenie zostało zakończone. Zawsze opcjonalne. Dostarczane po WIPE_USER_DATA lub WIPE_USER_AUXILIARY_DATA. *Jeśli aplikacja zgłosi błąd z programu obsługi dla WIPE_USER_DATA programu lub WIPE_USER_AUXILIARY_DATA, to powiadomienie nie zostanie wysłane.- Nigdy w wątku interfejsu użytkownika

(*) Czyszczenie danych może wystąpić z wielu powodów, na przykład:

  • Aplikacja o nazwie unregisterAccountForMAM.
  • Administrator IT zainicjował zdalne czyszczenie.
  • Administracja wymagane zasady dostępu warunkowego nie zostały spełnione.

Ostrzeżenie

Aplikacja nigdy nie powinna rejestrować WIPE_USER_DATA się dla powiadomień i WIPE_USER_AUXILIARY_DATA .

MANAGEMENT_REMOVED

Powiadomienie MANAGEMENT_REMOVED informuje aplikację, że konto zarządzane wcześniej przez zasady ma stać się niezarządzane. Gdy konto będzie niezarządzane, aplikacja nie będzie już mogła odczytywać zaszyfrowanych plików tego konta, odczytywać danych konta zaszyfrowanych za pomocą MAMDataProtectionManagerprogramu , wchodzić w interakcje z zaszyfrowanym schowkiem ani w inny sposób uczestniczyć w ekosystemie aplikacji zarządzanych.

Nie wymaga to wyczyszczenia danych użytkownika ani wylogowania użytkownika (jeśli wymagane było wyczyszczenie, WIPE_USER_DATA zostanie wysłane powiadomienie). Wiele aplikacji może nie wymagać obsługi tego powiadomienia, ale aplikacje, które z nich korzystają MAMDataProtectionManager , muszą sobie z tym poradzić. Aby uzyskać szczegółowe informacje, zobacz Ochrona buforu danych .

Gdy zestaw SDK wywołuje odbiornik aplikacji MANAGEMENT_REMOVED , będą spełnione następujące warunki:

  • Zestaw SDK odszyfrował już wcześniej zaszyfrowane pliki (ale nie chronione bufory danych) należące do aplikacji. Pliki w lokalizacjach publicznych na karcie sdcard, które nie należą bezpośrednio do aplikacji (na przykład foldery Dokumenty lub Pobierz), nie są odszyfrowywane.

  • Nowe pliki lub chronione bufory danych utworzone przez metodę odbiorcy (lub inny kod uruchomiony po uruchomieniu odbiornika) nie będą szyfrowane.

  • Aplikacja nadal ma dostęp do kluczy szyfrowania, więc operacje takie jak odszyfrowywanie buforów danych zakończą się pomyślnie.

Po powrocie odbiornika aplikacji nie będzie już miał dostępu do kluczy szyfrowania.

Implementowanie elementu MAMNotificationReceiver

Aby zarejestrować się w celu otrzymywania powiadomień z zestawu SDK, aplikacja musi utworzyć element MAMNotificationReceiver i zarejestrować go w elemencji MAMNotificationReceiverRegistry.

Aby zarejestrować odbiornik, wywołaj z registerReceiver odbiornikiem i żądany typ powiadomienia w metodzie Application.onCreate :

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

Implementacja MAMNotificationReceiver aplikacji musi zawierać onReceive(MAMNotification notification) metodę . Ta metoda zostanie wywołana indywidualnie dla każdego odebranego powiadomienia i musi zwrócić booleanwartość . Ogólnie rzecz biorąc, ta metoda powinna zawsze zwracać truewartość , chyba że aplikacja napotkała błąd podczas odpowiadania na powiadomienie.

Podobnie jak w przypadku innych typów odbiorników systemu Android, aplikacja ma elastyczność obsługi powiadomień:

  • Może tworzyć odrębne implementacje MAMNotificationReceiver dla różnych typów powiadomień (opisane poniżej). W takim przypadku upewnij się, że każda implementacja i każdy typ powiadomienia są rejestrowane oddzielnie.
  • Może ona używać pojedynczej implementacji MAMNotificationReceiver , która zawiera logikę reagowania na wiele różnych typów powiadomień. W takim przypadku musi zostać zarejestrowana dla każdego typu powiadomienia, na które może odpowiedzieć.
  • Może tworzyć wiele implementacji MAMNotificationReceiver , które odpowiadają na ten sam typ powiadomienia. W takim przypadku oba muszą być zarejestrowane w tym samym typie powiadomień.

Porada

Blokowanie w programie jest bezpieczne MAMNotificationReceiver.onReceive , ponieważ jego wywołanie zwrotne nie jest uruchomione w wątku interfejsu użytkownika.

Motywy niestandardowe

Do zestawu SDK aplikacji usługi Intune można dostarczyć motyw niestandardowy. Ten motyw niestandardowy zostanie zastosowany do wszystkich ekranów i okien dialogowych zestawu SDK. Jeśli motyw nie zostanie podany, zostanie użyty domyślny motyw zestawu SDK.

Udostępnianie motywu niestandardowego

Aby podać motyw, należy dodać następujący wiersz kodu w metodzie Application.onMAMCreate :

MAMThemeManager.setAppTheme(R.style.AppTheme);

W powyższym przykładzie należy zastąpić R.style.AppTheme motywem stylu, który ma zostać zastosowany przez zestaw SDK.

Zarządzanie zaufanymi certyfikatami głównymi

Jeśli aplikacja wymaga certyfikatów SSL/TLS wystawionych przez lokalny lub prywatny urząd certyfikacji w celu zapewnienia bezpiecznego dostępu do wewnętrznych witryn internetowych i aplikacji, zestaw SDK aplikacji usługi Intune dodał obsługę zarządzania zaufaniem certyfikatów przy użyciu klas INTERFEJSU API MAMTrustedRootCertsManager i MAMCertTrustWebViewClient.

Uwaga

MamCertTrustWebViewClient obsługuje system Android 10 lub nowszy.

Zaufane zarządzanie certyfikatami głównymi zapewnia obsługę:

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • Webview

Wymagania

Uwaga

Zaufanego zarządzania certyfikatami głównymi można używać niezależnie od VPN Gateway Microsoft Tunnel, jednak musisz licencjonować aplikację Microsoft MAM Tunnel do użycia.

Używanie zaufanych certyfikatów głównych z usługi Intune do ustanawiania kotwic zaufania

Zaufane zarządzanie certyfikatami głównymi umożliwia aplikacji używanie zaufanych certyfikatów głównych z usługi Intune w połączeniu z certyfikatami z urządzenia.

Klasy interfejsu API MAMTrustedRootCertsManager i MAMCertTrustWebClient używają zaufanych certyfikatów głównych usługi Intune dostarczanych za pośrednictwem zasad App Configuration jako opcji rezerwowej, jeśli zaufane magazyny certyfikatów głównych urządzenia nie zawierają wymaganych zaufanych certyfikatów głównych w celu nawiązania bezpiecznego połączenia z zasobami lokalnymi. W ten sposób aplikacja może używać certyfikatów urządzeń i usługi Intune do weryfikowania bezpiecznych połączeń i komunikacji z zaufanymi źródłami.

Aby ulepszyć ustawienia zabezpieczeń sieci, aplikacja może użyć pliku XML konfiguracji zabezpieczeń sieci. Zarządzanie zaufanymi certyfikatami głównymi uwzględnia te dodatkowe zabezpieczenia, sprawdzając, czy kod XML konfiguracji zabezpieczeń sieci aplikacji zawiera dowolną z następujących funkcji:

  • Niestandardowe kotwice zaufania z dodatkowymi urzędami certyfikacji, takimi jak certyfikaty z podpisem własnym.
  • Reguły specyficzne dla domeny dotyczące ograniczania zaufanych urzędów certyfikacji.
  • Przypinanie zestawów dla certyfikatów dla określonych domen.

Uwaga

Dowiedz się więcej o konfiguracji zabezpieczeń sieci systemu Android pod adresem: Konfiguracja zabezpieczeń sieci

Jeśli którykolwiek z tych elementów ma zastosowanie do domeny, która jest sprawdzana pod kątem zaufania, zarządzanie zaufanymi certyfikatami głównymi pominie niestandardowe kontrole zaufania dla tej domeny i pozwoli tylko domyślnym menedżerom zaufania platformy na przeprowadzanie testów.

Klasa MAMTrustedRootCertsManager

Ta klasa udostępnia następujące interfejsy API:

  • createSSLContext(String identity, String protocol): tworzy SSLContext obiekt, który używa zaufanych certyfikatów głównych dla określonej tożsamości i określonego protokołu SSL/TLS. Zwrócony SSLContext obiekt z tej klasy jest już poprawnie inicjowany za pomocą obiektów korzystających z X509TrustManager połączonych zaufanych certyfikatów głównych z urządzenia i usługi MAM.
  • createSSLSocketFactory(String identity, String protocol): tworzy SSLSocketFactory obiekt, który używa zaufanych certyfikatów głównych dla określonej tożsamości i określonego protokołu SSL/TLS. Zwracany SSLSocketFactory obiekt jest przywoływany z tego samego SSLContext obiektu w tej klasie.
  • createX509TrustManagers(String identity): tworzy tablicę X509TrustManager obiektów, które używają połączonych zaufanych certyfikatów głównych z urządzenia i usługi MAM dla określonej tożsamości.

Uwaga

Oczekuje identity się, że parametr będzie identyfikatorem ciągu dla określonego użytkownika uruchamiającego aplikację, na przykład jego nazwy UPN. W przypadku, gdy identyfikator użytkownika jest wcześniej nieznany, można przekazać wartość null, a funkcja ZARZĄDZANIA aplikacjami mobilnymi podejmie próbę odnalezienia poprawnej tożsamości z wątku lub procesu, w którym te interfejsy API są wywoływane. Tożsamość musi być poprawnie ustawiona w procesie lub wątku, aby funkcja ZARZĄDZANIA aplikacjami mobilnymi odnajdywać tożsamość. Aby dowiedzieć się więcej na temat ustawiania aktywnej tożsamości w procesie lub wątku, odwiedź stronę: Etap 5: Wiele tożsamości

Uwaga

protocol Jeśli parametr nie zostanie podany, używany jest najwyższy obsługiwany protokół SSL/TLS na platformie.

Oto kilka przykładów użycia tej klasy.

Przykład przy użyciu protokołu HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactory(identity, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
Przykład użycia narzędzia OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagers(identity);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);  

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

Klasa MAMCertTrustWebViewClient

Ta klasa zapewnia niestandardową implementację klasy android.webkit.WebViewClient systemu Android, która umożliwia obsługę błędu android.net.http.SslError.SSL_UNTRUSTED SSL w programie WebView. W przypadku obsługi błędu klasa używa zaufanych certyfikatów głównych skonfigurowanych w usłudze Intune i odebranych z usługi MAM w celu sprawdzenia wiarygodności hosta z docelowego adresu URL, który wygenerował błąd SSL w programie WebView. Jeśli implementacja niestandardowa nie obsługuje błędu SSL, zostanie wywołane domyślne zachowanie dziedziczone z superklasy. W przypadku korzystania z tej klasy należy utworzyć jej wystąpienie, a następnie wywołać polecenie WebView.setWebViewClient(WebViewClient) , aby zarejestrować je w wystąpieniu WebView .

Oto przykład użycia tej klasy.

Przykład przy użyciu programu WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

Kryteria zakończenia

Zapoznaj się z artykułem Szybkie testowanie ze zmianą zasad , aby ułatwić testowanie.

Weryfikowanie zapisywania w /otwieraniu z ograniczeń

Pomiń, jeśli nie zaimplementowano zasad dotyczących ograniczania transferu danych między aplikacjami i lokalizacjami magazynu urządzenia lub chmury.

Refamilializuj się w każdym scenariuszu, w którym aplikacja może zapisywać dane w usługach w chmurze lub danych lokalnych i otwierać dane z usług w chmurze lub danych lokalnych.

Dla uproszczenia te testy zakładają, że aplikacja obejmuje tylko obsługę zapisywania i otwierania danych z OneDrive dla Firm z jednej lokalizacji w aplikacji. Należy jednak zweryfikować każdą kombinację: każda obsługiwana lokalizacja zapisu w każdym miejscu aplikacji umożliwia zapisywanie danych, a każda obsługiwana otwarta lokalizacja w każdym miejscu, w które aplikacja umożliwia otwieranie danych.

W przypadku tych testów zainstaluj aplikację i Intune — Portal firmy; zaloguj się przy użyciu konta zarządzanego przed rozpoczęciem testu. Dodatkowo:

  • Ustaw zasady konta zarządzanego jako:
    • "Wyślij dane organizacji do innych aplikacji" do "Aplikacje zarządzane przez zasady".
    • "Odbieranie danych z innych aplikacji" do "Aplikacje zarządzane przez zasady".
Scenariusz Warunki wstępne Kroki
Zapisz w, w pełni dozwolone Zasady "Zapisz kopie danych organizacji" ustawione na wartość "Zezwalaj" — Przejdź do miejsca, w którym aplikacja może zapisywać dane, aby OneDrive dla Firm.
— Spróbuj zapisać dokument w celu OneDrive dla Firm na tym samym koncie zarządzanym zalogowanym do aplikacji.
— Upewnij się, że zapisywanie jest dozwolone.
Zapisz w, wykluczone — Zasady "Zapisz kopie danych organizacji" ustawione na "Blokuj"
— Zasady "Zezwalaj użytkownikowi na zapisywanie kopii w wybranych usługach" są ustawione tylko na wartość "OneDrive dla Firm"
— Przejdź do miejsca, w którym aplikacja może zapisywać dane, aby OneDrive dla Firm.
— Spróbuj zapisać dokument w celu OneDrive dla Firm na tym samym koncie zarządzanym zalogowanym do aplikacji.
— Upewnij się, że zapisywanie jest dozwolone.
— Jeśli aplikacja na to zezwala, spróbuj zapisać plik w innej lokalizacji magazynu w chmurze i potwierdzić, że plik jest zablokowany.
Zapisz w, zablokowane Zasady "Zapisz kopie danych organizacji" ustawione na "Blokuj" — Przejdź do miejsca, w którym aplikacja może zapisywać dane, aby OneDrive dla Firm.
— Spróbuj zapisać dokument w celu OneDrive dla Firm na tym samym koncie zarządzanym zalogowanym do aplikacji.
— Upewnij się, że zapisywanie jest zablokowane.
— Jeśli aplikacja na to zezwala, spróbuj zapisać plik w innej lokalizacji magazynu w chmurze i potwierdzić, że plik jest zablokowany.
Otwórz z, w pełni dozwolone Zasady "Otwórz dane w dokumentach organizacji" ustawione na wartość "Zezwalaj" — Przejdź do miejsca, w którym aplikacja może otwierać dane z OneDrive dla Firm.
— Spróbuj otworzyć dokument z OneDrive dla Firm z tego samego konta zarządzanego zalogowanego do magazynu aplikacji.
— Upewnij się, że otwieranie jest dozwolone.
Otwarte z, wykluczone — Zasady "Otwórz dane w dokumentach organizacji" ustawione na "Blokuj"
— Zasady "Zezwalaj użytkownikom na otwieranie danych z wybranych usług" są ustawione tylko na wartość "OneDrive dla Firm"
— Przejdź do miejsca, w którym aplikacja może otwierać dane z OneDrive dla Firm.
— Spróbuj otworzyć dokument z OneDrive dla Firm z tego samego konta zarządzanego zalogowanego do magazynu aplikacji.
— Upewnij się, że otwieranie jest dozwolone.
— Jeśli aplikacja na to zezwala, spróbuj otworzyć inny plik z innej lokalizacji magazynu w chmurze i potwierdzić, że jest zablokowany.
Otwieranie z, zablokowane Zasady "Otwórz dane w dokumentach organizacji" ustawione na "Blokuj" — Przejdź do miejsca, w którym aplikacja może otwierać dane z OneDrive dla Firm.
— Spróbuj otworzyć dokument z OneDrive dla Firm z tego samego konta zarządzanego zalogowanego do magazynu aplikacji.
— Upewnij się, że otwarte okno jest zablokowane.
— Jeśli aplikacja na to zezwala, spróbuj otworzyć inny plik z innej lokalizacji magazynu w chmurze i potwierdzić, że jest zablokowany.

Weryfikowanie ograniczeń powiadomień

Pomiń, jeśli nie zaimplementujesz zasad ograniczania zawartości w powiadomieniach.

Jeśli chodzi o zasady ochrony aplikacji, aplikacja może uruchamiać trzy różne typy powiadomień:

  1. Powiadomienia, które nie zawierają żadnych danych konta.
  2. Powiadomienia zawierające dane należące do konta zarządzanego.
  3. Powiadomienia zawierające dane należące do konta niezarządzanego.

Jeśli aplikacja ma jedną tożsamość, tylko pierwsze 2 są istotne, ponieważ nie zostaną zastosowane żadne zabezpieczenia, jeśli jedyne konto nie jest zarządzane.

Ograniczenia powiadomień można zweryfikować, wyzwalając wszystkie trzy typy powiadomień z skonfigurowanymi różnymi wartościami zasad.

W przypadku tych testów zainstaluj aplikację i Intune — Portal firmy; zaloguj się przy użyciu konta zarządzanego przed rozpoczęciem testu. Jeśli aplikacja jest wieloaspektowa, zaloguj się również do aplikacji przy użyciu konta niezarządzanego.

Scenariusz Warunki wstępne Kroki
Zablokowano pełną zawartość Zasady "Powiadomienia o danych organizacji" ustawione na "Blokuj" — Wyzwalanie aplikacji w celu wyzwolenia powiadomienia bez danych konta.
— Upewnij się, że to powiadomienie nie wyświetla żadnej zawartości.
— Wyzwalanie aplikacji w celu wyzwolenia powiadomienia z danymi konta zarządzanego.
— Upewnij się, że to powiadomienie nie wyświetla żadnej zawartości.
— Wyzwalanie aplikacji w celu wyzwolenia powiadomienia przy użyciu danych niezarządzanego konta.
— Upewnij się, że to powiadomienie nie wyświetla żadnej zawartości.
Zawartość częściowa zablokowana Zasady "Powiadomienia o danych organizacji" ustawione na "Blokuj dane organizacji" — Wyzwalanie aplikacji w celu wyzwolenia powiadomienia bez danych konta.
— Potwierdź, że to powiadomienie wyświetla jego pełną zawartość.
— Wyzwalanie aplikacji w celu wyzwolenia powiadomienia z danymi konta zarządzanego.
— Potwierdź, że to powiadomienie redaguje zawartość konta zarządzanego.
— Wyzwalanie aplikacji w celu wyzwolenia powiadomienia przy użyciu danych niezarządzanego konta.
— Potwierdź, że to powiadomienie wyświetla jego pełną zawartość.
Brak zablokowanej zawartości Zasady "Powiadomienia o danych organizacji" ustawione na wartość "Zezwalaj"

Weryfikowanie kopii zapasowej i przywracania danych

Pomiń, jeśli nie zaimplementujesz zasad ochrony danych kopii zapasowych.

Ponownie zapoznaj się z zawartością (plikami i/lub parami klucz-wartość) skonfigurowaną przez aplikację do tworzenia kopii zapasowej. Należy sprawdzić, czy tylko oczekiwana zawartość jest częścią przywracania. Dodatkowa zawartość w przywracaniu może prowadzić do wycieku danych.

W przypadku tych testów zainstaluj aplikację i Intune — Portal firmy; zaloguj się przy użyciu konta zarządzanego przed rozpoczęciem testu. Jeśli aplikacja jest wieloaspektowa, zaloguj się również do aplikacji przy użyciu konta niezarządzanego.

Postępuj zgodnie z oficjalnymi instrukcjami systemu Android dotyczącymi testowania kopii zapasowych. Te instrukcje różnią się w przypadku automatycznego tworzenia kopii zapasowych i tworzenia kopii zapasowych klucz/wartość, dlatego postępuj dokładnie.

Weryfikowanie niestandardowego przechwytywania ekranu względem zasad

Pomiń, jeśli nie zaimplementowaliśmy niestandardowych ograniczeń przechwytywania ekranu.

Jeśli aplikacja ma funkcję pomijaną na poziomie FLAG_SECUREsystemu Android, sprawdź, czy ta funkcja jest zablokowana przez ograniczenia przechwytywania Windowekranu zasad ochrony aplikacji.

W przypadku tych testów zainstaluj aplikację i Intune — Portal firmy; zaloguj się przy użyciu konta zarządzanego przed rozpoczęciem testu.

Scenariusz Warunki wstępne Kroki
Zablokowane przechwytywanie ekranu Zasady "Przechwytywanie ekranu i Asystent Google" ustawione na "Blokuj" — Przejdź do lokalizacji w aplikacji, która korzysta z niestandardowego kodu FLAG_SECURE.
— Spróbuj użyć tej funkcji.
— Upewnij się, że funkcja jest zablokowana.
Dozwolone przechwytywanie ekranu Zasady "Przechwytywanie ekranu i Asystent Google" mają wartość "Zezwalaj" — Przejdź do lokalizacji w aplikacji, która korzysta z niestandardowego kodu FLAG_SECURE.
— Spróbuj użyć tej funkcji.
— Upewnij się, że funkcja jest dozwolona.

Weryfikowanie urzędu certyfikacji ochrony aplikacji

Pomiń, jeśli nie zaimplementujesz urzędu certyfikacji usługi Support App Protection.

Oprócz typowych kroków weryfikacji tworzenia i przypisywania zasad ochrony aplikacji do aplikacji i konta testowego należy również utworzyć i przypisać zasady dostępu warunkowego ochrony aplikacji do konta testowego. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie zasad dostępu warunkowego opartego na aplikacji w usłudze Intune .

Kroki testowania:

  1. Przed rozpoczęciem tego testu odinstaluj program Microsoft Authenticator i Intune — Portal firmy.
  2. Zainstaluj aplikację.
  3. Zaloguj się do aplikacji przy użyciu konta testowego, które jest objęte zarówno zasadami ochrony aplikacji, jak i zasadami urzędu certyfikacji opartymi na aplikacji.
  4. Potwierdź, że aplikacja wyświetli monit o zainstalowanie Portal firmy.
  5. Zaloguj się ponownie.
  6. Potwierdź, że aplikacja wyświetli monit o zarejestrowanie urządzenia. Postępuj zgodnie z monitami. Jeśli aplikacja nie wyświetli monitu o rejestrację w tym miejscu, upewnij się, że urządzenie testowe odinstalowało najpierw inne aplikacje z obsługą zestawu SDK, Portal firmy i Authenticator. Jeśli ten monit nadal nie zostanie wyświetlony, ponownie zapoznaj się z powyższymi instrukcjami dotyczącymi implementacji.
  7. Potwierdź, że masz dostęp do wszystkich danych aplikacji po zarejestrowaniu.

Weryfikowanie odbiorników powiadomień

Pomiń, jeśli nie zaimplementowaliśmy funkcji Zarejestruj w celu otrzymywania powiadomień z zestawu SDK.

Kroki weryfikacji zależą od typu powiadomień, dla których aplikacja została zarejestrowana. W przypadku wszystkich typów powiadomień dodaj rejestrowanie, aby upewnić się, że odbiornik jest prawidłowo wywoływany.

MAM_ENROLLMENT_RESULT można wyzwolić po prostu przez zalogowanie się do aplikacji przy użyciu konta objętego zasadami ochrony aplikacji.

REFRESH_APP_CONFIGi REFRESH_POLICY mogą być wyzwalane przez zaktualizowanie odpowiednich zasad App Configuration i zasad ochrony aplikacji przeznaczonych dla konta testowego i oczekiwanie na odebranie zaktualizowanych zasad przez zestaw SDK.

Porada

Zobacz Szybkie testowanie przy użyciu zmieniających się zasad , aby przyspieszyć ten proces.

MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAwszystkie WIPE_COMPLETED powiadomienia mogą być wyzwalane przez wystawienie selektywnego czyszczenia z Microsoft Intune.

Weryfikowanie motywów niestandardowych

Pomiń, jeśli motywy niestandardowe nie zostały zaimplementowane.

Obsługa motywów niestandardowych można zweryfikować, sprawdzając kolory w oknach dialogowych zestawu SDK. Najprostsze okno dialogowe do sprawdzenia to ekran numeru PIN funkcji MAM.

Warunki wstępne:

  • Ustaw zasady konta zarządzanego jako:
    • "Numer PIN dostępu" do elementu "Wymagane".
  • Zainstaluj aplikację i Intune — Portal firmy.

Kroki testu:

  1. Uruchom aplikację i zaloguj się przy użyciu konta testowego.
  2. Potwierdź, że zostanie wyświetlony ekran numeru PIN funkcji MAM, który jest tematycznie oparty na motywie niestandardowym udostępnionym zestawowi SDK.

Następne kroki

Jeśli wykonano ten przewodnik w kolejności i zostały spełnione wszystkie powyższe kryteria zakończenia , gratulacje, aplikacja jest teraz w pełni zintegrowana z zestawem SDK aplikacji usługi Intune i może wymuszać zasady ochrony aplikacji! Jeśli pominięto jedną z poprzednich sekcji uczestnictwa aplikacji, Etap 5: Wiele tożsamości i Etap 6: App Configuration i nie masz pewności, czy aplikacja powinna obsługiwać te funkcje, ponownie zapoznaj się z kluczowymi decyzjami dotyczącymi integracji zestawu SDK.

Ochrona aplikacji jest teraz podstawowym scenariuszem dla twojej aplikacji. W dalszym ciągu zapoznaj się z tym przewodnikiem i dodatkiem w miarę dalszego opracowywania aplikacji.