Na tej stronie znajdziesz omówienie nowych interfejsów API dla firm, funkcji i zmian w działaniu wprowadzonych w Androidzie 10.
Profile służbowe na urządzeniach należących do firmy
Android 10 wprowadza nowe funkcje udostępniania i atestowania na urządzeniach należących do firmy, które wymagają tylko profilu służbowego.
Ulepszone narzędzia do obsługi administracyjnej profili służbowych
Profile służbowe można obsługiwać na urządzeniach z Androidem 10 lub nowszym zarejestrowanych za pomocą kodu QR lub bezdotykowo. Podczas obsługi urządzenia należącego do firmy nowy dodatkowy element intencji umożliwia aplikacjom kontrolera zasad dotyczących urządzeń (DPC) inicjowanie konfiguracji profilu służbowego lub w pełni zarządzanego. Po utworzeniu profilu służbowego lub skonfigurowaniu pełnego zarządzania kontrolery zasad urządzeń muszą uruchomić ekrany zgodności z zasadami, aby wymusić stosowanie początkowych zasad.
W pliku manifestu DPC zadeklaruj nowy filtr intencji dla
GET_PROVISIONING_MODE
w działaniu i dodaj uprawnienie BIND_DEVICE_ADMIN, aby zapobiec uruchamianiu działania przez dowolne aplikacje. Przykład:
<activity
android:name=".GetProvisioningModeActivity"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<intent-filter>
<action
android:name="android.app.action.GET_PROVISIONING_MODE" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Podczas udostępniania system uruchamia aktywność powiązaną z filtrem intencji. Celem tej aktywności jest określenie trybu zarządzania (profil służbowy lub w pełni zarządzane).
Przed określeniem odpowiedniego trybu zarządzania urządzeniem warto pobrać dodatkowe informacje o wdrażaniu. Aktywność może wywołać funkcję getIntent(), aby pobrać te informacje:
DPC mogą też utworzyć nowy zamiar wyniku i dodać do niego te dodatkowe informacje:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE: dodaj do istniejącej grupy lub utwórz nową. Ten pakiet jest wysyłany jako dodatkowy element intencji, gdy DPC uruchamia ekrany zgodności z zasadami.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE: Konto do migracji należy podać tylko wtedy, gdy dodajesz konto służbowe w ramach udostępniania profilu służbowego.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS
Aby ustawić tryb zarządzania na urządzeniu, wywołaj
putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), gdzie desiredProvisioningMode to:
- Profil służbowy:
PROVISIONING_MODE_MANAGED_PROFILE - W pełni zarządzane:
PROVISIONING_MODE_FULLY_MANAGED_DEVICE
Dokończ proces udostępniania profilu służbowego lub urządzenia w pełni zarządzanego, wysyłając szczegóły udostępniania z powrotem do konfiguracji za pomocą setResult(RESULT_OK,
Intent) i zamykając wszystkie aktywne ekrany za pomocą finish().
Po zakończeniu udostępniania urządzeń dla DPC dostępny jest nowy Intent, który umożliwia uruchamianie ekranów zgodności i wymuszanie początkowych ustawień zasad. Na urządzeniach z profilem służbowym ekrany zgodności są wyświetlane w profilu służbowym. DPC musi zapewnić, że ekrany zgodności będą wyświetlane użytkownikom, nawet jeśli użytkownik opuści proces konfiguracji.
W pliku manifestu DPC zadeklaruj nowy filtr intencji dla
ADMIN_POLICY_COMPLIANCE
w działaniu i dodaj uprawnienie BIND_DEVICE_ADMIN, aby zapobiec uruchamianiu działania przez dowolne aplikacje. Przykład:
<activity
android:name=".PolicyComplianceActivity"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<intent-filter>
<action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
DPC musi używać tego nowego zamiaru zamiast nasłuchiwać transmisji
ACTION_PROFILE_PROVISIONING_COMPLETE.
Aktywność powiązana z filtrem intencji może wywołać funkcję getIntent(), aby pobrać EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE.
Po sprawdzeniu zgodności z zasadami usługa ADMIN_POLICY_COMPLIANCE musi zwrócić wartość setResult(RESULT_OK,
Intent) i zamknąć wszystkie aktywne ekrany za pomocą kodu
finish().
W pełni zarządzane urządzenia przenoszą użytkowników na ekran główny. Urządzenia z profilem służbowym proszą użytkowników o dodanie konta osobistego przed powrotem do ekranu głównego.
Atestowanie identyfikatora urządzenia z profilem służbowym
Kontrolery zasad dotyczących urządzeń (DPC) ustawione jako administrator profilu służbowego udostępnionego za pomocą rejestracji typu zero-touch mogą uzyskiwać identyfikatory urządzeń potwierdzone przez bezpieczny sprzęt, takie jak numer IMEI lub numer seryjny producenta. Urządzenie musi zawierać bezpieczny sprzęt (np. zaufane środowisko wykonawcze (TEE) lub bezpieczny element (SE)) i obsługiwać potwierdzanie tożsamości urządzenia oraz rejestrację typu zero-touch.
Komponent administracyjny profilu służbowego może wywoływać funkcję DevicePolicyManager.generateKeyPair(), przekazując co najmniej jeden z argumentów ID_TYPE_SERIAL, ID_TYPE_IMEI lub ID_TYPE_MEID jako argument idAttestationFlags.
Więcej informacji o wyodrębnianiu i weryfikowaniu identyfikatorów urządzeń znajdziesz w artykule Weryfikowanie par kluczy wspieranych sprzętowo za pomocą atestacji kluczy.
Usprawnienia profilu służbowego
Dostępne są nowe interfejsy API, które obsługują widoczność kalendarza w różnych profilach i blokowanie instalowania aplikacji z nieznanych źródeł na całym urządzeniu.
Profil służbowy, nieznane źródła na całym urządzeniu
Aplikacje pobrane ze źródeł innych niż Google Play (lub inne zaufane sklepy z aplikacjami) są nazywane aplikacjami z nieznanych źródeł. W Androidzie 10 administratorzy profili służbowych mogą uniemożliwić dowolnemu użytkownikowi lub profilowi instalowanie aplikacji z nieznanych źródeł w dowolnym miejscu na urządzeniu, dodając nowe ograniczenie użytkownika – DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY.
Po dodaniu tego ograniczenia osoba korzystająca z urządzenia nadal może instalować aplikacje za pomocą adb.
Aby zapobiec przypadkowemu instalowaniu przez użytkowników aplikacji z nieznanych źródeł, zalecamy dodanie tego ograniczenia, ponieważ nie wymaga ono zainstalowania usług Google Play. Jeśli chcesz obsługiwać starsze wersje Androida, możesz ustawić wartość konfiguracji zarządzanej w Google Play.
Ograniczanie do profilu służbowego dozwolonych urządzeń wejściowych
Gdy administratorzy profili służbowych wywołują DevicePolicyManager.setPermittedInputMethods(), użytkownicy są ograniczeni tylko do dozwolonych metod wprowadzania w profilu służbowym, a nie na całym urządzeniu. Dzięki temu mają pełną kontrolę nad metodami wprowadzania na osobistej stronie urządzenia.
Ciche wymazywanie profili służbowych
Dodano flagę WIPE_SILENTLY
do DevicePolicyManager.wipeData().
Jeśli flaga jest ustawiona, użytkownicy nie będą powiadamiani po wyczyszczeniu profilu służbowego za pomocą wipeData().
Nowe funkcje na urządzeniach w pełni zarządzanych
Android 10 wprowadza nowe funkcje i interfejsy API dla urządzeń w pełni zarządzanych, w tym ręczne aktualizacje systemu, rozszerzenie obsługi QR kodów i NFC o dane logowania do sieci Wi-Fi EAP oraz obsługę DNS over TLS.
Ręczna instalacja aktualizacji systemu
W Androidzie 10 administratorzy urządzeń w pełni zarządzanych mogą instalować aktualizacje systemu za pomocą pliku aktualizacji systemu. Ręczne aktualizacje systemu umożliwiają administratorom IT:
- Przed zainstalowaniem aktualizacji na dużej liczbie urządzeń przetestuj ją na niewielkiej liczbie urządzeń.
- Unikaj duplikowania pobierania w sieciach o ograniczonej przepustowości.
- Rozłóż instalacje w czasie lub aktualizuj urządzenia tylko wtedy, gdy nie są używane.
Najpierw administrator IT ustawia zasady odroczonej aktualizacji systemu, aby opóźnić automatyczną instalację (w razie potrzeby). Następnie DPC urządzenia wywołuje installSystemUpdate()
ze ścieżką do pliku aktualizacji systemu producenta urządzenia. Przekaż obiekt InstallSystemUpdateCallback, którego system może używać do zgłaszania błędów występujących przed ponownym uruchomieniem urządzenia. Jeśli coś pójdzie nie tak, system wywoła funkcję onInstallUpdateError() z kodem błędu.
Po ponownym uruchomieniu urządzenia DPC musi potwierdzić pomyślną instalację za pomocą interfejsu API wersji, np. Build.FINGERPRINT. Jeśli aktualizacja się nie powiedzie, zgłoś to administratorowi IT.
Udostępnianie Wi-Fi w ramach programu wcześniejszego dostępu
W Androidzie 10 kody QR i dane NFC używane do obsługi administracyjnej urządzenia mogą zawierać konfigurację i dane logowania EAP, w tym certyfikaty. Gdy użytkownik zeskanuje kod QR lub dotknie tagu NFC, urządzenie automatycznie uwierzytelni się w lokalnej sieci Wi-Fi za pomocą protokołu EAP i rozpocznie proces udostępniania bez konieczności dodatkowego wprowadzania danych ręcznie.
Aby uwierzytelnić Wi-Fi za pomocą protokołu EAP, dodaj dodatkowy element EXTRA_PROVISIONING_WIFI_SECURITY_TYPE o wartości "EAP". Aby określić uwierzytelnianie EAP, możesz dodać do intencji te dodatkowe informacje o wdrażaniu:
EXTRA_PROVISIONING_WIFI_EAP_METHODEXTRA_PROVISIONING_WIFI_IDENTITYEXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITYEXTRA_PROVISIONING_WIFI_DOMAINEXTRA_PROVISIONING_WIFI_PHASE2_AUTHEXTRA_PROVISIONING_WIFI_USER_CERTIFICATEEXTRA_PROVISIONING_WIFI_CA_CERTIFICATE
Obsługa prywatnego DNS
Organizacje mogą używać DNS-over-TLS (na urządzeniach z Androidem nazywanego prywatnym DNS), aby uniknąć wycieku zapytań DNS, w tym zapytań dotyczących wewnętrznych nazw hostów. Komponenty administracyjne urządzeń w pełni zarządzanych mogą kontrolować ustawienia prywatnego DNS na urządzeniu. Aby ustawić tryb prywatnego DNS, wywołaj:
setGlobalPrivateDnsModeOpportunistic()aby urządzenie używało prywatnego DNS, gdy system może wykryć obsługujący serwer nazw, lubsetGlobalPrivateDnsModeSpecifiedHost()aby określić nazwę hosta serwera nazw, który obsługuje RFC7858 w argumencieprivateDnsHost.
Gdy DPC wywoła jedną z tych metod, system zwróci PRIVATE_DNS_SET_NO_ERROR, jeśli wywołanie zakończy się powodzeniem. W przeciwnym razie zwraca błąd.
Aby pobrać tryb prywatnego DNS i hosta ustawionego na urządzeniu, wywołaj funkcje getGlobalPrivateDnsMode() i getGlobalPrivateDnsHost().
Możesz uniemożliwić użytkownikom zmianę ustawień prywatnego DNS, dodając ograniczenie użytkownika DISALLOW_CONFIG_PRIVATE_DNS.
Wyjątek od trybu blokady VPN
Tryb blokady VPN umożliwia DPC blokowanie całego ruchu sieciowego, który nie korzysta z sieci VPN. Administratorzy w przypadku w pełni zarządzanych urządzeń i profili służbowych mogą wykluczyć aplikacje z trybu blokady. Wyłączone aplikacje domyślnie korzystają z VPN, ale automatycznie łączą się z innymi sieciami, jeśli VPN jest niedostępna. Aplikacje zwolnione, którym wyraźnie odmówiono dostępu do sieci VPN, będą korzystać tylko z innych sieci.
Aby wyłączyć aplikację z trybu blokady, wywołaj nową metodę
DevicePolicyManager
setAlwaysOnVpnPackage(), która akceptuje listę wyłączonych pakietów aplikacji. Wszystkie pakiety aplikacji dodane przez DPC muszą być zainstalowane na urządzeniu w momencie wywołania tej metody. Jeśli aplikacja zostanie odinstalowana i ponownie zainstalowana, należy ją ponownie wykluczyć. Aby przywrócić aplikacje, które były wcześniej wyłączone z trybu blokady, zadzwoń pod numer getAlwaysOnVpnLockdownWhitelist().
Aby pomóc administratorom w uzyskiwaniu stanu trybu blokady na urządzeniach w pełni zarządzanych i profilach służbowych, w Androidzie 10 dodaliśmy metodę isAlwaysOnVpnLockdownEnabled().
Nowe zakresy przekazywania
Android 10 rozszerza listę funkcji, które DPC może delegować do innych, bardziej wyspecjalizowanych aplikacji. Android grupuje metody interfejsu API potrzebne do wykonania zadania w zakresy. Aby przekazać zakres, wywołaj funkcję
setDelegatedScopes()
i przekaż co najmniej jeden z tych zakresów:
DELEGATION_NETWORK_LOGGING– delegowanie rejestrowania aktywności sieciowej;DELEGATION_CERT_SELECTIONaby delegować wybór certyfikatu
Android 10 wprowadza nową klasęDelegatedAdminReceiver dla aplikacji delegowanych. System używa tego odbiornika transmisji do wysyłania do aplikacji delegowanych wywołań zwrotnych podobnych do wywołań zwrotnych DPC. Aplikacje, którym delegowano rejestrowanie aktywności sieciowej i wybór certyfikatu, powinny implementować tę klasę. Aby dodać ten komponent do aplikacji delegowanej, wykonaj te czynności:
- Dodaj do aplikacji delegującej podklasę
DelegatedAdminReceiver. - Zadeklaruj
<receiver>w pliku manifestu aplikacji, dodając działanie filtra intencji dla każdego wywołania zwrotnego. Na przykładACTION_NETWORK_LOGS_AVAILABLElubACTION_CHOOSE_PRIVATE_KEY_ALIAS. - Chroń odbiornik transmisji za pomocą uprawnienia
BIND_DEVICE_ADMIN.
Poniższy fragment kodu przedstawia manifest aplikacji delegującej, która obsługuje zarówno rejestrowanie sieci, jak i wybór certyfikatu:
<receiver android:name=".app.DelegatedAdminReceiver"
android:permission="android.permission.BIND_DELEGATED_ADMIN">
<intent-filter>
<action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
<action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
</intent-filter>
</receiver>
Rejestrowanie aktywności sieciowej
Aby pomóc organizacjom wykrywać złośliwe oprogramowanie i śledzić jego działania, kontrolery zasad urządzeń mogą rejestrować połączenia TCP i wyszukiwania DNS wykonywane przez system. W Androidzie 10 administratorzy w przypadku w pełni zarządzanych urządzeń mogą przekazywać rejestrowanie sieci do specjalistycznej aplikacji.
Aby pobrać dzienniki sieci po udostępnieniu przez system pakietu, aplikacje delegowane powinny najpierw utworzyć podklasę DelegatedAdminReceiver (opisano to wcześniej). W klasie podrzędnej zaimplementuj wywołanie zwrotne
onNetworkLogsAvailable()
zgodnie z instrukcjami w artykule Pobieranie logów.
Aplikacje delegowane mogą wywoływać te metody DevicePolicyManager (przekazując null jako argument admin):
Aby uniknąć utraty logów, kontrolery zasad urządzeń nie powinny włączać rejestrowania sieci, jeśli planują przekazać uprawnienia innej aplikacji. Aplikacja, której przekazano uprawnienia, powinna włączyć i zbierać logi sieci. Po przekazaniu przez DPC uprawnień do rejestrowania sieci nie będzie on otrzymywać żadnych dalszych wywołań zwrotnych onNetworkLogsAvailable().
Aby dowiedzieć się, jak zgłaszać rejestrowanie aktywności sieciowej z aplikacji delegowanej, przeczytaj przewodnik dla programistów Rejestrowanie aktywności sieciowej.
Wybór certyfikatu
W Androidzie 10 administratorzy w przypadku w pełni zarządzanych urządzeń, profili służbowych i dodatkowych użytkowników mogą przekazać wybór certyfikatu wyspecjalizowanej aplikacji.
Aby wybrać alias certyfikatu, aplikacje delegujące powinny najpierw utworzyć podklasę
DelegatedAdminReceiver (opisano wcześniej). W klasie podrzędnej zaimplementuj wywołanie zwrotne onChoosePrivateKeyAlias() i zwróć alias preferowanego certyfikatu lub, aby poprosić użytkownika o wybranie certyfikatu, zwróć null.
Wycofanie zasad dotyczących administratora urządzenia
Android 10 uniemożliwia aplikacjom i kontrolerom zasad dotyczących urządzeń stosowanie starszych zasad administratora urządzenia. Zalecamy klientom i partnerom przejście na urządzenia w pełni zarządzane lub profile służbowe. Te zasady zgłaszają błąd SecurityException w przypadku wywołania przez administratora urządzenia, który kieruje zasady na Androida 10:
USES_POLICY_DISABLE_CAMERAUSES_POLICY_DISABLE_KEYGUARD_FEATURESUSES_POLICY_EXPIRE_PASSWORDUSES_POLICY_LIMIT_PASSWORD
Niektóre aplikacje używają administratora urządzenia do zarządzania urządzeniami konsumenckimi. Na przykład blokowanie i czyszczenie utraconego urządzenia. Aby to umożliwić, nadal dostępne są te zasady:
Więcej informacji o tych zmianach znajdziesz w sekcji Wycofanie administratora urządzenia.
Nowe funkcje aplikacji
Aplikacje kierowane na Androida 10 mogą przed wyświetleniem poufnych danych lub uruchomieniem kluczowych funkcji wysyłać zapytania o złożoność blokady ekranu ustawioną na urządzeniu. Aplikacje wywołujące interfejs KeyChain API zyskują ulepszone działanie, a aplikacje VPN mają dostęp do nowych funkcji.
Kontrola jakości blokady ekranu
Od Androida 10 aplikacje z krytycznymi funkcjami, które wymagają blokady ekranu, mogą wysyłać zapytania o stopień złożoności blokady ekranu urządzenia lub profilu służbowego. Aplikacje wymagające silniejszej blokady ekranu mogą kierować użytkownika do ustawień blokady ekranu w systemie, umożliwiając mu aktualizację ustawień zabezpieczeń.
Aby sprawdzić jakość blokady ekranu:
- Dodaj nowe uprawnienie
REQUEST_PASSWORD_COMPLEXITYdo pliku manifestu aplikacji. - Zadzwoń pod numer
DevicePolicyManager.getPasswordComplexity(). Złożoność jest podzielona na 4 kategorie:
Aby uruchomić ustawienia systemowej blokady ekranu, użyj
ACTION_SET_NEW_PASSWORD
z dodatkowym parametrem EXTRA_PASSWORD_COMPLEXITY – opcje, które nie
spełniają złożoności określonej w dodatkowym parametrze intencji, są wyszarzone. Użytkownicy mogą wybrać jedną z dostępnych opcji blokady ekranu lub zamknąć ekran.
Sprawdzona metoda: przed otwarciem strony blokady ekranu systemu wyświetl w aplikacji komunikat. Gdy aplikacja zostanie wznowiona, ponownie wywołaj funkcję
DevicePolicyManager.getPasswordComplexity(). Jeśli nadal wymagana jest silniejsza blokada ekranu, ogranicz dostęp, zamiast wielokrotnie prosić użytkowników o zaktualizowanie ustawień zabezpieczeń.
Obsługa serwera proxy HTTP w aplikacjach VPN
W Androidzie 10 aplikacje VPN mogą ustawić serwer proxy HTTP dla połączenia VPN. Aby dodać serwer proxy HTTP, aplikacja VPN musi skonfigurować instancję ProxyInfo z hostem i portem przed wywołaniem VpnService.Builder.setHttpProxy().
System i wiele bibliotek sieciowych używa tego ustawienia serwera proxy, ale system nie wymusza na aplikacjach przekazywania żądań HTTP przez serwer proxy.
Przykładowy kod pokazujący, jak ustawić serwer proxy HTTP, znajdziesz w przykładowej aplikacji ToyVPN.
Tryby usługi VPN
Aplikacje VPN mogą wykrywać, czy usługa działa, dzięki funkcji stałego VPN, a także czy aktywny jest tryb blokady. Nowe metody dodane w Androidzie 10 mogą pomóc w dostosowaniu interfejsu. Możesz na przykład wyłączyć przycisk odłączania, gdy stała sieć VPN kontroluje cykl życia usługi.
Po połączeniu się z usługą i utworzeniu interfejsu lokalnego aplikacje VPN mogą wywoływać te metody VpnService:
isAlwaysOn(), aby sprawdzić, czy system uruchomił usługę z powodu stałej sieci VPN.isLockdownEnabled()aby sprawdzić, czy system blokuje połączenia, które nie korzystają z sieci VPN.
Stan „zawsze włączony” pozostaje taki sam, gdy usługa jest uruchomiona, ale stan trybu blokady może się zmienić.
Ulepszenia pęku kluczy
Android 10 wprowadza kilka ulepszeń związanych z interfejsem KeyChain API.
Gdy aplikacja wywołuje KeyChain.choosePrivateKeyAlias(), urządzenia z Androidem 10 i nowszym filtrują listę certyfikatów, z których użytkownik może wybierać, na podstawie wystawców i algorytmów kluczy określonych w wywołaniu.
Na przykład, gdy serwer TLS wysyła komunikat Certificate Request w ramach uzgadniania połączenia TLS, a przeglądarka wywołuje KeyChain.choosePrivateKeyAlias(), w oknie wyboru certyfikatu wyświetlają się tylko opcje zgodne z parametrem issuers. Jeśli nie ma dostępnych opcji lub na urządzeniu nie ma zainstalowanych certyfikatów, użytkownik nie zobaczy prośby o wybór.
Dodatkowo KeyChain nie wymaga już, aby urządzenie miało blokadę ekranu przed zaimportowaniem kluczy lub certyfikatów urzędu certyfikacji.