Tworzenie kontrolera zasad dotyczących urządzeń

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.

  1. Dodaj bibliotekę do pliku build.gradle:

    Groovy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
  2. 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:

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ą EMMKonfigurowanie 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 pracydodać 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ć metody onAccountReady()onFailure().

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).
        }
};
  • 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.