Z tego przewodnika dowiesz się, jak opracować kontroler zasad dotyczących urządzeń (DPC) na potrzeby urządzeń wdrożonych w ramach Androida Enterprise. Aplikacja DPC, wcześniej znana jako kontroler zasad obowiązujących w firmie, kontroluje lokalne zasady dotyczące urządzeń i aplikacje systemowe na urządzeniach.
Informacje o DPC
W przypadku wdrożenia Androida Enterprise firma zachowuje kontrolę nad różnymi aspektami urządzeń użytkowników, takimi jak odseparowanie informacji związanych z pracą od danych osobistych użytkowników, wstępne konfigurowanie zatwierdzonych aplikacji w środowisku czy wyłączanie funkcji urządzenia (np. aparatu).
Jako dostawca usług EMM tworzysz aplikację DPC, z której klienci mogą korzystać w połączeniu z konsolą EMM i serwerem. Klient wdraża kontroler zasad urządzenia na zarządzanych przez siebie urządzeniach użytkowników. Kontroler zasad dotyczących urządzeń pełni funkcję połączenia między konsolą EMM (i serwerem) a urządzeniem. Administrator używa konsoli EMM do wykonywania różnych zadań, w tym konfigurowania ustawień urządzeń i aplikacji.
Kontroler DPC tworzy profil służbowy na urządzeniu, na którym jest zainstalowany, i nim zarządza. Profil służbowy szyfruje informacje związane z pracą i oddziela je od osobistych aplikacji i danych użytkowników. Przed utworzeniem profilu służbowego DPC może też udostępnić konto zarządzane Sklepu Google Play do użytku na urządzeniu.
Z tego przewodnika dowiesz się, jak opracować kontroler zasad urządzenia, który może tworzyć profile służbowe i nimi zarządzać.
Biblioteka pomocy DPC dla EMM
Biblioteka pomocy DPC dla usług EMM zawiera klasy narzędziowe i pomocnicze, które ułatwiają wdrażanie urządzeń z Androidem i zarządzanie nimi w środowisku firmowym. Biblioteka umożliwia korzystanie z ważnych funkcji w aplikacjach DPC:
- Obsługa udostępniania kont zarządzanego Sklepu Google Play: udostępnianie zarządzanych kont Google Play z aplikacji DPC wymaga, aby aplikacje Google Play i usługi Google Play spełniały minimalne wymagania dotyczące wersji. Aktualizowanie tych aplikacji może być jednak skomplikowane. Biblioteka pomocy DPC dba o aktualizowanie tych aplikacji, a także zapewnia zgodność z przyszłymi aktualizacjami procesu udostępniania zarządzanych kont Google Play. Więcej informacji znajdziesz w artykule Pomoc dotycząca udostępniania kont zarządzanego Sklepu Google Play.
- Obsługa konfiguracji zarządzanych: używanie interfejsu Play EMM API do obsługi konfiguracji zarządzanych zatwierdzonych aplikacji to najprostszy sposób na wdrożenie konfiguracji zarządzanych w kontrolerze zasad dotyczących urządzeń. Biblioteka DPC Support umożliwia przekazywanie do Google Play zadania stosowania konfiguracji zarządzanych (wcześniej ograniczeń aplikacji) ustawionych przez administratora za pomocą konsoli EMM. Korzystanie z interfejsu Play EMM API do obsługi konfiguracji zarządzanych umożliwia zastosowanie konfiguracji aplikacji w sposób niepodzielny podczas instalacji. Więcej informacji o włączaniu tej funkcji w DPC znajdziesz w artykule Stosowanie konfiguracji zarządzanych do aplikacji służbowych.
Aby pobrać bibliotekę, wykonaj te czynności: Zadania opisane w tym przewodniku zakładają użycie biblioteki pomocy DPC.
Pobieranie biblioteki pomocy DPC
Aby korzystać z biblioteki pomocy DPC, pobierz ją ze społeczności dostawców usług EMM dla Androida Enterprise. Podczas tworzenia aplikacji DPC musisz dodać bibliotekę do pliku build.gradle i zadbać o inne zależności. Na przykład biblioteka wymaga biblioteki klienta uwierzytelniania usług Google Play w wersji 11.4.0.
- Dodaj bibliotekę do pliku
build.gradle:
Groovy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- Dodaj do pliku build.gradle bibliotekę klienta uwierzytelniania
Usług Google Play w wersji 11.4.0:
Groovy
implementation 'com.google.android.gms:play-services-auth:11.4.0'
Kotlin
implementation("com.google.android.gms:play-services-auth:11.4.0")
Biblioteka wymaga do działania określonych uprawnień, więc musisz dodać je do pliku manifestu aplikacji DPC podczas przesyłania do Google Play:
<uses-permission android:name= "android.permission.DOWNLOAD_WITHOUT_NOTIFICAT>ION<"/ uses-permission android:name= "android.permission>.GE<T_ACCOUNTS"/ uses-permission android:name= "android.per>mis<sion.MANAGE_ACCOUNTS"/ uses-permission android:name= "andro>id.<permission.WRITE_SYNC_SETTINGS"/ uses-permission android:name= "com.google.andr>oid.providers.gsf.permission.READ_GSERVICES"/
Oprócz tych wstępnych czynności konfiguracyjnych i wdrożeniowych musisz też zainicjować w kodzie DPC konkretną funkcję biblioteki, w zależności od funkcji, którą chcesz wdrożyć. Szczegółowe informacje znajdziesz w odpowiednich sekcjach poniżej.
Tworzenie DPC
Zbuduj DPC na podstawie istniejącego modelu używanego w przypadku aplikacji do zarządzania urządzeniami.
W szczególności aplikacja musi być podklasą klasy
DeviceAdminReceiver (klasy z pakietu android.app.admin) zgodnie z opisem w artykule
Administrowanie urządzeniami.
Utwórz profil służbowy
Przykład pokazujący, jak utworzyć podstawowy profil służbowy, znajdziesz w BasicManagedProfile w GitHubie.
Aby utworzyć profil służbowy na urządzeniu, które ma już profil osobisty, najpierw sprawdź, czy urządzenie obsługuje profil służbowy. W tym celu sprawdź, czy jest dostępna funkcja systemowa FEATURE_MANAGED_USERS:
Kotlin
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Jeśli urządzenie obsługuje profile służbowe, utwórz profil służbowy, wysyłając intencję z działaniem ACTION_PROVISION_MANAGED_PROFILE. (W niektórych dokumentach termin profil zarządzany jest ogólnym określeniem, które w kontekście Androida w firmie oznacza to samo co profil służbowy). Dodaj nazwę pakietu administratora urządzenia jako dodatkowy element:
Kotlin
val provisioningActivity = getActivity() // You'll need the package name for the DPC app. val myDPCPackageName = "com.example.myDPCApp" // Set up the provisioning intent val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java) provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()) if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE) provisioningActivity.finish() }
Java
Activity provisioningActivity = getActivity(); // You'll need the package name for the DPC app. String myDPCPackageName = "com.example.myDPCApp"; // Set up the provisioning intent Intent provisioningIntent = new Intent("android.app.action.PROVISION_MANAGED_PROFILE"); ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class); provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()); if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager()) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE); provisioningActivity.finish(); }
System odpowiada na tę intencję w ten sposób:
- Sprawdza, czy urządzenie jest zaszyfrowane. Jeśli nie, system poprosi użytkownika o zaszyfrowanie urządzenia przed kontynuowaniem.
- Tworzy profil służbowy.
- Usuwa z profilu służbowego aplikacje, które nie są wymagane.
- Kopiuje aplikację DPC do profilu służbowego i ustawia ją jako właściciela profilu.
Zastąp
onActivityResult(), aby sprawdzić, czy obsługa administracyjna się powiodła:
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data) } }
Java
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return; } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data); } }
Dokończ włączanie profilu służbowego
Gdy profil zostanie skonfigurowany, system wywoła metodę
DeviceAdminReceiver.onProfileProvisioningComplete() aplikacji DPC. Zastąp tę metodę wywołania zwrotnego, aby dokończyć włączanie profilu służbowego.
Typowe DeviceAdminReceiver.onProfileProvisioningComplete()wdrożenie wywołania zwrotnego wykonuje te czynności:
- Sprawdza, czy urządzenie jest zgodne z zasadami dotyczącymi urządzeń EMM, zgodnie z opisem w artykule Konfigurowanie zasad dotyczących urządzeń.
- Umożliwia korzystanie z aplikacji systemowych, które administrator udostępnił w profilu służbowym za pomocą
DevicePolicyManager.enableSystemApp(). - Jeśli urządzenie korzysta z zarządzanego Sklepu Google Play, dodaje odpowiednie konto do profilu służbowego, aby można było instalować na urządzeniu zatwierdzone aplikacje.
- Konta zarządzanego Sklepu Google Play: więcej informacji znajdziesz w sekcjach Zapewnianie środowiska pracy dla kont zarządzanego Sklepu Google Play i Dodawanie konta zarządzanego Sklepu Google Play.
- Konta Google: użyj
AccountManager.addAccount().
Aktywowanie profilu służbowego
Po wykonaniu tych zadań wywołaj metodę
setProfileEnabled() menedżera zasad dotyczących urządzeń, aby aktywować profil służbowy:
Kotlin
// Get the device policy manager val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val componentName = myDeviceAdminReceiver.getComponentName(this) // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile") // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName)
Java
// Get the device policy manager DevicePolicyManager myDevicePolicyMgr = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName componentName = myDeviceAdminReceiver.getComponentName(this); // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile"); // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName);
Konfigurowanie zasad dotyczących urządzeń
Aplikacja DPC stosuje zasady dotyczące urządzeń ustawione przez administratora, aby spełnić wymagania i ograniczenia organizacji. Na przykład zasady bezpieczeństwa mogą wymagać, aby urządzenia blokowały się po określonej liczbie nieudanych prób wpisania hasła. Kontroler zasad dotyczących urządzeń wysyła do konsoli EMM zapytanie o bieżące zasady, a następnie stosuje je za pomocą interfejsu Device Administration API.
Informacje o tym, jak stosować zasady dotyczące urządzeń, znajdziesz w artykule Zasady.
Stosowanie konfiguracji zarządzanych w przypadku aplikacji służbowych
Konfiguracje zarządzane umożliwiają klientom wstępne konfigurowanie aplikacji, które zatwierdzili do wdrożenia, oraz łatwe aktualizowanie tych aplikacji, gdy konfiguracja wymaga zmiany. Skonfigurowanie aplikacji przed wdrożeniem zapewnia zgodność z zasadami bezpieczeństwa i innymi zasadami organizacji po zainstalowaniu aplikacji na urządzeniu docelowym.
Funkcje aplikacji są definiowane przez dewelopera w schemacie XML (schemacie konfiguracji zarządzanych), który jest dołączany do aplikacji podczas przesyłania jej do Google Play (deweloperzy aplikacji mogą znaleźć szczegółowe informacje w artykule Konfigurowanie konfiguracji zarządzanych).
Pobierasz ten schemat z aplikacji, aby wyświetlać go administratorom klientów w konsoli EMM, udostępniać interfejs użytkownika, w którym wyświetlają się różne opcje zdefiniowane w schemacie, i umożliwiać administratorom wstępne konfigurowanie ustawień aplikacji. Wynikowa konfiguracja zarządzana ustawiona przez administratora jest zwykle przechowywana na serwerze EMM, który następnie używa interfejsu Play EMM API do ustawiania wartości Managedconfigurationsfordevice lub Managedconfigurationsforuser. Szczegółowe informacje znajdziesz w artykule Konfiguracje zarządzane w Google Play.
Konfiguracje zarządzane można zastosować w aplikacji za pomocą interfejsu Play EMM API (zalecane podejście) lub bezpośrednio z poziomu DPC (opisane w sekcji Stosowanie konfiguracji zarządzanych bezpośrednio z poziomu DPC). Korzystanie z interfejsu Play EMM API ma kilka zalet, m.in. łatwą implementację, ponieważ możesz używać biblioteki pomocy DPC, aby uprościć zadania DPC. Dodatkowo interfejs Play EMM API:
- Ustawia konfigurację w sposób niepodzielny podczas instalowania nowej aplikacji, dzięki czemu jest ona gotowa do użycia przy pierwszym uruchomieniu.
- Umożliwia zarządzanie konfiguracjami na poziomie użytkownika, dzięki czemu nie musisz monitorować obsługi na poziomie urządzenia.
Stosowanie konfiguracji zarządzanych za pomocą interfejsu Play EMM API
Aby używać interfejsu Play EMM API do zarządzanych konfiguracji, DPC musi zezwalać Sklepowi Google Play na ustawianie konfiguracji. Biblioteka pomocy DPC zajmuje się tym za Ciebie, przekazując konfigurację wysłaną przez Google Play.
Aby korzystać z interfejsu Play EMM API, pobierz bibliotekę pomocy DPC, a następnie włącz w DPC obsługę konfiguracji zarządzanych.
Włącz obsługę konfiguracji zarządzanych w kontrolerze zasad urządzenia
Zaimportuj tę klasę w DPC:
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
Zainicjuj bibliotekę konfiguracji zarządzanych. W tym przykładzie „admin” to ComponentName elementu DeviceAdminReceiver.
Kotlin
var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)
Java
ManagedConfigurationsSupport managedConfigurationsSupport = new ManagedConfigurationsSupport(context, admin);
Włącz konfiguracje zarządzane:
Kotlin
managedConfigurationsSupport.enableManagedConfigurations()
Java
managedConfigurationsSupport.enableManagedConfigurations();
Po zainicjowaniu tej biblioteki w kontrolerze zasad urządzenia możesz używać interfejsu Google Play EMM API w konsoli i na serwerze EMM, aby stosować zarządzane konfiguracje do zatwierdzonych aplikacji zamiast kodować te zadania bezpośrednio w kontrolerze zasad urządzenia. Więcej informacji znajdziesz w artykule Konfiguracje zarządzane w Google Play.
Stosowanie konfiguracji zarządzanych bezpośrednio z kontrolera zasad dotyczących urządzeń
Aby zmienić ustawienia konfiguracji aplikacji bezpośrednio z poziomu DPC, wywołaj metodę DevicePolicyManager.setApplicationRestrictions() i przekaż parametry aplikacji DPC DeviceAdminReceiver, nazwę pakietu aplikacji docelowej oraz Bundle zawierający konfigurację zarządzaną aplikacji ustawioną przez administratora. Szczegółowe informacje znajdziesz w sekcjach Jak działa interakcja między konsolą DPC a konsolą EMM i Konfigurowanie konfiguracji zarządzanych. Pamiętaj jednak, że to alternatywne podejście do stosowania konfiguracji zarządzanych nie jest zalecane w przypadku wdrożeń kont zarządzanego Sklepu Google Play.
Obsługa kont zarządzanego Sklepu Google Play
Biblioteka pomocy DPC obejmuje obsługę kont zarządzanego Sklepu Google Play. Aby skorzystać z tej pomocy, musisz najpierw zainicjować bibliotekę, a potem sprawdzić środowisko pracy i dodać zarządzane konto Google Play.
Inicjowanie obsługi zarządzanych kont Google Play w DPC
Zaimportuj tę klasę w DPC:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
Zainicjuj bibliotekę zgodności udostępniania. W tym przykładzie „admin” to ComponentName
DeviceAdminReceiver.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Zapewnianie środowiska pracy dla kont zarządzanego Sklepu Google Play
Po udostępnieniu urządzenia przez aplikację kontrolera zasad dotyczących urządzeń w trybie właściciela profilu (ACTION_PROVISION_MANAGED_PROFILE) lub właściciela urządzenia (ACTION_PROVISION_MANAGED_DEVICE) sprawdź, czy urządzenie obsługuje zarządzany Sklep Google Play, wywołując:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Funkcja zwrotna informuje o powodzeniu lub niepowodzeniu tego procesu. Gdy wywołanie zwrotne zakończy się powodzeniem, można dodać zarządzane konto Google Play. Jeśli wywołanie zwrotne zgłosi błąd, poproś użytkownika o sprawdzenie, czy urządzenie ma połączenie z siecią (np. jeśli pobieranie się nie powiedzie). W innych przypadkach zgłoś problem do Google.
Kotlin
object : WorkingEnvironmentCallback() { override fun onSuccess() { // Can now provision the managed Google Play Account } override fun onFailure(error: Error) { // Notify user, handle error (check network connection) } }
Java
new WorkingEnvironmentCallback() { @Override public void onSuccess() { // Can now provision the managed Google Play Account } @Override public void onFailure(Error error) { // Notify user, handle error (check network connection) } }
Dodawanie zarządzanego konta Sklepu Google Play
AccountManager może dodać zarządzany Sklep Google Play na urządzeniu. Aby uprościć interakcję z AccountManager, użyj funkcji pomocniczej (pokazanej w przykładzie poniżej) z biblioteki pomocy DPC. Funkcja obsługuje token zwrócony przez serwer Google Play i ułatwia udostępnianie konta zarządzanego Sklepu Google Play. Funkcja zwraca wartość, gdy zarządzany Sklep Google Play jest w prawidłowym stanie:
Kotlin
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
Java
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
token– token uwierzytelniania użytkownika wygenerowany przez wywołanie interfejsu Google Play EMM API.Users.generateAuthenticationToken()accountAddedCallback– zwraca zarządzane konto Google Play, które zostało pomyślnie dodane na urządzeniu. To wywołanie zwrotne powinno zawierać metodyonAccountReady()ionFailure().
Kotlin
val workAccountAddedCallback = object : WorkAccountAddedCallback() { override fun onAccountReady(account: Account, deviceHint: String) { // Device account was successfully added to the device // and is ready to be used. } override fun onFailure(error: Error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } }
Java
WorkAccountAddedCallback workAccountAddedCallback = new WorkAccountAddedCallback() { @Override public void onAccountReady(Account account, String deviceHint) { // Device account was successfully added to the device // and is ready to be used. } @Override public void onFailure(Error error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } };
Powiązana dokumentacja
- Więcej informacji o interfejsie Device Administration API znajdziesz w artykule Device Administration.
- Więcej informacji o metodach udostępniania w programie Android Enterprise znajdziesz w artykule Udostępnianie urządzeń w przewodniku dla programistów Androida Enterprise.
- Przykładowy kod w GitHubie, który pokazuje, jak utworzyć podstawowy profil służbowy, znajdziesz w BasicManagedProfile.
- Przykładowy kod GitHub, który pokazuje, jak ustawiać konfiguracje w innych aplikacjach jako właściciel profilu, znajdziesz w AppRestrictionEnforcer.