Tworzenie kontrolera zasad dotyczących urządzeń

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.

  1. Dodaj bibliotekę do pliku build.gradle:

    Odlotowy

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

    Kotlin

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

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 API Users.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ć metody onAccountReady() i 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 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.