W tym przewodniku opisujemy, jak utworzyć kontroler zasad urządzeń (DPC) dla urządzeń w firmowym wdrożeniu Androida. Aplikacja DPC, wcześniej znana jako kontroler zasad firmowych, kontroluje lokalne zasady dotyczące urządzeń i aplikacje systemowe na urządzeniach.
Informacje o DPC
W ramach wdrożenia Androida Enterprise firma kontroluje różne aspekty urządzeń użytkowników, takie jak izolowanie informacji związanych z pracą od danych osobistych użytkowników, wstępne konfigurowanie zatwierdzonych aplikacji do działania w środowisku lub wyłączanie funkcji urządzenia (np. aparatu).
Jako dostawca usług EMM tworzysz aplikację DPC, której klienci mogą używać w połączeniu z konsolą EMM i serwerem. Klient wdraża DPC na urządzeniach użytkowników, którymi zarządza. DPC działa jak most między konsolą EMM (i serwerem) a urządzeniem. Administrator używa konsoli EMM do wykonywania różnych czynności, takich jak konfigurowanie ustawień urządzenia i aplikacji.
DPC tworzy profil służbowy i zarządza nim na urządzeniu, na którym został zainstalowany. 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ądzanego Sklepu Google Play do użytku na urządzeniu.
Z tego przewodnika dowiesz się, jak utworzyć DPC do tworzenia profili służbowych i zarządzania nimi.
Biblioteka pomocy DPC dla dostawców usług EMM
Biblioteka pomocy DPC dla dostawców usług EMM składa się z klas narzędziowych i pomocniczych, które ułatwiają udostępnianie urządzeń z Androidem i zarządzanie nimi w środowisku firmowym. Biblioteka umożliwia korzystanie z ważnych funkcji aplikacji DPC:
- Obsługa administracyjna zarządzanych kont Google Play: aby można było obsługiwać zarządzane konta Google Play z aplikacji DPC, aplikacje z Google Play i usług Google Play muszą spełniać minimalne wymagania dotyczące wersji. Jednak aktualizowanie tych aplikacji może być skomplikowane. Biblioteka pomocy DPC zajmuje się aktualizowaniem tych aplikacji, a także zapewnia zgodność z przyszłymi aktualizacjami procesu obsługi administracyjnej zarządzanych kont Google Play. Więcej informacji znajdziesz w artykule o obsłudze obsługi administracyjnej 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 na DPC. Biblioteka pomocy DPC umożliwia przekazanie Google Play zadania stosowania konfiguracji zarządzanych (wcześniej nazywanych ograniczeniami aplikacji) skonfigurowanych przez administratora w konsoli EMM. Używanie interfejsu Play EMM API do obsługi konfiguracji zarządzanych umożliwia atomowe zastosowanie konfiguracji aplikacji podczas instalacji. Więcej informacji o włączaniu tej funkcji na DPC znajdziesz w sekcji Stosowanie konfiguracji zarządzanych do aplikacji służbowych.
Aby pobrać bibliotekę, wykonaj te czynności. Zadania opisane w tym przewodniku przyjmują zastosowanie biblioteki pomocy DPC.
Pobierz bibliotekę pomocy DPC
Aby korzystać z biblioteki pomocy DPC, pobierz ją ze społeczności dostawców usług EMM na urządzeniach z Androidem 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 w Usługach Google Play w wersji 11.4.0.
- Dodaj bibliotekę do pliku
build.gradle
:
Odlotowy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- Dodaj do pliku build.gradle 11.4.0
bibliotekę klienta uwierzytelniania Usług Google Play:
Odlotowy
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 określonych uprawnień, więc podczas przesyłania do Google Play musisz dodać do pliku manifestu aplikacji DPC te uprawnienia:
<uses-permission android:name= "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> <uses-permission android:name= "android.permission.GET_ACCOUNTS"/> <uses-permission android:name= "android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name= "android.permission.WRITE_SYNC_SETTINGS"/> <uses-permission android:name= "com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Oprócz wykonania tych wstępnej konfiguracji i wdrażania musisz też zainicjować w kodzie DPC określone funkcje biblioteki w zależności od możliwości, którą chcesz zaimplementować. Szczegółowe informacje znajdziesz w odpowiednich sekcjach poniżej.
Utwórz DPC
Zbuduj DPC na istniejącym modelu używanym do administrowania urządzeniem.
W szczególności aplikacja musi podklasyfikować
DeviceAdminReceiver
(klasę z pakietu android.app.admin
) zgodnie z opisem w sekcji
Administrowanie urządzeniem.
Utwórz profil służbowy
Przykład ilustrujący, jak utworzyć podstawowy profil służbowy, znajdziesz na stronie BasicManagedProfile w GitHubie.
Aby utworzyć profil służbowy na urządzeniu, na którym masz już profil osobisty, sprawdź najpierw, czy to urządzenie obsługuje profil służbowy. W tym celu sprawdź, czy działa funkcja systemu 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ę za pomocą działania ACTION_PROVISION_MANAGED_PROFILE. (W niektórych dokumentach profil zarządzany to termin ogólny, który oznacza to samo co profil służbowy w kontekście Androida w firmie). Dodatkowo dodaj nazwę pakietu administratora urządzenia:
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 reaguje na tę intencję, wykonując te czynności:
- Sprawdza, czy urządzenie jest zaszyfrowane. Jeśli nie, zanim przejdziesz dalej, system poprosi użytkownika o zaszyfrowanie urządzenia.
- Tworzy profil służbowy.
- Usuwa niewymagane aplikacje z profilu służbowego.
- Kopiuje aplikację DPC do profilu służbowego i ustawia sama DPC 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
Po udostępnieniu profilu system wywołuje metodę
DeviceAdminReceiver.onProfileProvisioningComplete()
aplikacji DPC. Zastąp tę metodę wywołania zwrotnego, aby dokończyć włączanie profilu służbowego.
Typowa implementacja wywołania zwrotnego DeviceAdminReceiver.onProfileProvisioningComplete()
spełnia te warunki:
- Sprawdza, czy urządzenie jest zgodne z zasadami dotyczącymi urządzeń EMM opisanymi w artykule Konfigurowanie zasad dotyczących urządzeń.
- Włącza aplikacje systemowe, które administrator udostępnił w profilu służbowym przy użyciu
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ć zatwierdzone aplikacje na urządzeniu.
- Zarządzane konta Google Play: szczegółowe informacje znajdziesz w artykułach Konfigurowanie środowiska wykonawczego zarządzanych kont Google Play i Dodawanie konta zarządzanego Sklepu Google Play.
- Konta Google: użyj
AccountManager.addAccount()
.
Aktywuj profil służbowy
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ń określone przez administratora, aby spełnić wymagania i ograniczenia organizacji. Polityka bezpieczeństwa może na przykład wymagać, aby urządzenia były blokowane po określonej liczbie nieudanych prób wpisania hasła. DPC wysyła do konsoli EMM zapytanie o aktualne zasady, a następnie stosuje je przy użyciu interfejsu Device Administration API.
Informacje o stosowaniu zasad dotyczących urządzeń znajdziesz w artykule Zasady.
Stosowanie konfiguracji zarządzanych w aplikacjach służbowych
Konfiguracje zarządzane umożliwiają klientom wstępne konfigurowanie aplikacji zatwierdzonych do wdrożenia oraz łatwe aktualizowanie ich, gdy wymagana jest zmiana konfiguracji. Skonfigurowanie aplikacji przed wdrożeniem daje pewność, że po zainstalowaniu aplikacji na urządzeniu docelowym będą spełnione bezpieczeństwo organizacji i inne zasady.
Możliwości aplikacji są określane przez jej dewelopera w schemacie XML (schemacie zarządzanych konfiguracji), który towarzyszy aplikacji po przesłaniu jej do Google Play (szczegóły dla deweloperów aplikacji: Konfigurowanie konfiguracji zarządzanych).
Możesz pobrać ten schemat z aplikacji, aby wyświetlić go administratorom klientów w konsoli EMM, udostępnić interfejs, w którym różne opcje są zdefiniowane w swoim widoku schematu, oraz umożliwić administratorom wstępne konfigurowanie ustawień aplikacji. Powstała konfiguracja zarządzana przez administratora jest zwykle przechowywana na serwerze EMM, który następnie za pomocą interfejsu Play EMM API ustawia Managedconfigurationsfordevice lub Managedconfigurationsforuser. Więcej informacji znajdziesz w artykule Konfiguracje zarządzane przez Play (w języku angielskim).
Konfiguracje zarządzane można stosować w aplikacji za pomocą interfejsu Play EMM API (metoda zalecana) lub bezpośrednio z DPC (opisane w sekcji Stosowanie konfiguracji zarządzanych bezpośrednio z DPC). Korzystanie z interfejsu Play EMM API ma kilka zalet, w tym łatwą implementację, bo pozwala na korzystanie z biblioteki pomocy DPC do upraszczania zadań związanych z DPC. Oprócz tego interfejs Play EMM API:
- Ustawia atomową konfigurację podczas instalowania nowej aplikacji, zapewniając, że jest ona gotowa, gdy użytkownik uruchomi ją po raz pierwszy.
- Pozwala zarządzać konfiguracjami na poziomie poszczególnych użytkowników, dzięki czemu możesz uniknąć monitorowania udostępniania na poziomie poszczególnych urządzeń.
Stosowanie konfiguracji zarządzanych za pomocą interfejsu Play EMM API
Aby można było używać interfejsu Play EMM API w konfiguracjach zarządzanych, DPC musi zezwalać Google Play na ustawianie konfiguracji. Biblioteka pomocy DPC zajmie się tym za Ciebie, przesyłając przez serwer proxy konfigurację przesłaną przez Google Play.
Aby korzystać z interfejsu Play EMM API, pobierz Bibliotekę pomocy DPC, a potem włącz obsługę konfiguracji zarządzanych w DPC.
Włącz obsługę konfiguracji zarządzanych w DPC
Zaimportuj te zajęcia do DPC:
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
Zainicjuj bibliotekę konfiguracji zarządzanych. W tym przykładzie „admin” to nazwa komponentu DeviceAdminReceivedr.
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 DPC możesz używać interfejsu Google Play EMM API w konsoli EMM i na serwerze, aby stosować zarządzane konfiguracje w zatwierdzonych aplikacjach, zamiast kodować te zadania bezpośrednio w DPC. Więcej informacji znajdziesz na stronie Konfiguracje zarządzane w Google Play.
Stosuj konfiguracje zarządzane bezpośrednio z DPC
Aby zmienić ustawienia konfiguracji aplikacji bezpośrednio z DPC, wywołaj metodę DevicePolicyManager.setApplicationRestrictions() i przekaż parametry obiektu DeviceAdminReceivedr aplikacji DPC, nazwę pakietu aplikacji docelowej oraz pakiet składający się z zarządzanej konfiguracji aplikacji zgodnie z ustawionymi przez administratora ustawieniami. Więcej informacji znajdziesz w artykułach Jak współdziałają DPC i konsola EMM oraz Konfigurowanie konfiguracji zarządzanych. Ta alternatywna metoda stosowania konfiguracji zarządzanych nie jest jednak zalecana w przypadku wdrożeń zarządzanych kont Google Play.
Obsługa administracyjna zarządzanych kont Google Play
Biblioteka pomocy DPC umożliwia obsługę administracyjną kont zarządzanego Sklepu Google Play. Aby skorzystać z tej pomocy, najpierw musisz zainicjować bibliotekę, a potem upewnić się, że środowisko robocze jest aktywne, a potem dodać zarządzane konto Google Play.
Zainicjuj obsługę zarządzanych kont Google Play w DPC
Zaimportuj te zajęcia do DPC:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
Zainicjuj bibliotekę zgodności obsługi administracyjnej. W tym przykładzie „admin” to ComponentName
kolumny
DeviceAdminReceiver
.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Upewnij się, że środowisko pracy zarządzanych kont Google Play
Gdy DPC udostępni urządzenie w trybie właściciela profilu (ACTION_PROVISION_MANAGED_PROFILE
) lub w trybie właściciela urządzenia (ACTION_PROVISION_MANAGED_DEVICE
), upewnij się, że urządzenie obsługuje konta zarządzanego Sklepu Google Play. W tym celu zadzwoń:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Wywołanie zwrotne informuje o powodzeniu lub niepowodzeniu tego procesu. Gdy wywołanie zwrotne zakończy się powodzeniem, można dodać konto zarządzanego Sklepu Google Play. Jeśli wywołanie zwrotne zgłosi błąd, poproś użytkownika, aby sprawdził, czy urządzenie ma połączenie z siecią (na przykład w przypadku niepowodzenia pobierania). W innych przypadkach zgłoś błąd 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 konta zarządzanego Sklepu Google Play
AccountManager
Framework Androida może dodawać konto zarządzanego Sklepu Google Play na urządzeniu. Aby uprościć interakcję z elementem AccountManager
, użyj funkcji pomocniczej (pokazanej w przykładzie poniżej) z Biblioteki pomocy DPC. Ta funkcja obsługuje token zwrócony przez serwer Google Play i ułatwia obsługę administracyjną zarządzanego konta Google Play. Ta funkcja zwraca się, gdy konto zarządzanego Sklepu 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 APIUsers.generateAuthenticationToken()
usługi EMM w Google Play.accountAddedCallback
– zwraca konto zarządzanego Sklepu Google Play, które zostało dodane na urządzeniu. To wywołanie zwrotne powinno obejmować 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 Administrowanie urządzeniami.
- Więcej informacji o metodach obsługi administracyjnej Androida Enterprise znajdziesz w sekcji Obsługa administracyjna urządzeń w przewodniku dla programistów Androida Enterprise.
- Przykładowy GitHub, który pokazuje, jak utworzyć podstawowy profil służbowy, znajdziesz w sekcji BasicManagedProfile.
- Przykładowy plik GitHub, który pokazuje, jak ustawiać konfiguracje w innych aplikacjach jako właściciel profilu, znajdziesz w sekcji AppRestrictionEnforcer.