Sieci i telefonia

Funkcje w tym przewodniku opisują zarządzanie sieciami i telefonami możliwości, które można wdrożyć w zasadach dotyczących urządzeń kontroler (DPC). Ten dokument zawiera kod Możesz też skorzystać z testów DPC przykładowego kodu funkcji biznesowych Androida.

Aplikacja DPC może działać w trybie właściciela profilu na urządzeniach osobistych lub u właściciela urządzenia na w pełni zarządzanych urządzeniach. Ta tabela zawiera informacje o tym, które funkcje są dostępne, gdy DPC działa w trybie właściciela profilu lub właściciela urządzenia tryb:

Funkcja Właściciel profilu Właściciel urządzenia
Dostęp do kontaktów służbowych we wszystkich profilach
Upewnij się, że bezpieczne połączenie sieciowe na potrzeby ruchu służbowego
Skonfiguruj pojedynczy identyfikator sieci bezprzewodowej we wszystkich regionach
Podaj oddzielny telefon z profilem służbowym

Dostęp do kontaktów służbowych w różnych profilach

Dostawcy usług EMM mogą zezwolić profilowi osobistemu użytkownika na dostęp do kontaktów służbowych, osobiste i służbowe kontakty użytkownika są dostępne w wynikach wyszukiwania lokalnego do katalogu zdalnego. Na urządzeniach osobistych za pomocą jednego telefonu może nawiązywać i odbierać połączenia osobiste oraz służbowe. Ponadto kontakty służbowe są dobrze zintegrowane z interfejsem systemu. Jeśli profil służbowy to zaszyfrowane dane nie będą dostępne dla profilu osobistego.

Integracja z interfejsem systemowym

UI systemu przedstawia przychodzące połączenia służbowe z ikoną aktówki. callLog pokazuje też do oznaczenia przychodzących i wychodzących połączeń służbowych. Osobisty telefon czy aplikacje do obsługi kontaktów mogą wyświetlać ID rozmówcy z kontaktu służbowego za pomocą pilota w katalogu, nie muszą więc być już zsynchronizowane na urządzeniu lokalnym. Aplikacja do obsługi wiadomości może korzystać z lokalnego identyfikatora rozmówcy i wyszukiwać.

Definicja zgodności z Androidem Dokument (CDD) zawiera wymagania. aby kontakty służbowe były wyświetlane w domyślnym telefonie, oraz wymagania kontakty i komunikatory są oznaczone plakietką informującą, że pochodzą z pracy profil.

Kontakty służbowe są dostępne i można je wyszukiwać

Użytkownik może uzyskiwać dostęp do kontaktów służbowych i dzwonić do nich z profilu osobistego, który pojawią się na ekranie wyszukiwania w aplikacji Telefon. Użytkownik może wyszukać pracę kontakty (za pomocą autouzupełniania), które są synchronizowane lokalnie z urządzeniem i wyświetlane za pomocą zdalnego wyszukiwania katalogu.

Zarządzaj kontaktami służbowymi w profilu głównym

DPC kontroluje uprawnienia do wyszukiwania kontaktów służbowych. Działanie u właściciela profilu DPC zarządza widocznością kontaktów służbowych w profilu osobistym. Więcej informacji znajdziesz w artykule Tworzenie zasad dotyczących urządzeń kontrolerem.

Wyszukiwanie kontaktów służbowych według profilu osobistego jest domyślnie włączone.

Zadbaj o bezpieczne połączenie sieciowe na potrzeby ruchu służbowego

działające w trybie właściciela urządzenia lub właściciela profilu, zgodnie z zasadami dotyczącymi urządzeń; kontroler może używać stałego połączenia wirtualnej sieci prywatnej (VPN) do wymuszania na aplikacjach przekazywania ruchu przez określoną aplikację VPN, której nie można i ominęło. Przy użyciu stałego połączenia VPN DPC może zagwarantować, że sieć ruch z profilu służbowego lub urządzenia zarządzanego przechodzi przez usługę VPN, bez interwencji użytkownika. Ten proces tworzy bezpieczne połączenie sieciowe dla: i stały ruch w profilu służbowym.

Informacje o zawsze włączonych połączeniach VPN

W ramach platformy systemowej routing VPN jest zarządzany automatycznie, dzięki czemu użytkownik nie może ominąć usługi VPN. Jeśli usługa VPN jest rozłączona w trybie w trybie blokady, ruch nie może przeciekać do otwartego internetu. Aplikacje wdrażanie VpnService, zawsze włączona sieć VPN zapewnia środowisko do zarządzania bezpiecznymi połączeniami VPN na zaufanym serwerze i utrzymaniu go. Usługa VPN automatycznie ponownie uruchomi połączenia między aktualizacjami aplikacji, niezależnie od tego, czy korzystasz z sieci Wi-Fi, czy sieć komórkową. Jeśli urządzenie uruchomi się ponownie, platforma ponownie uruchomi połączenie VPN.

Połączenie z usługą VPN jest dla użytkownika przejrzyste. Dla należących do firmy użytkowników, nie muszą oni potwierdzać okna z prośbą o zgodę na przetwarzanie danych Sieć VPN w trybie stałym. Ustawienia sieci VPN użytkownika umożliwiają włączenie zawsze włączone połączenie.

Jeśli DISALLOW_CONFIG_VPN to true, użytkownik nie może skonfigurować sieci VPN. Włącz DISALLOW_DEBUGGING_FEATURES , by uniemożliwić użytkownikom zastępowanie stałej sieci VPN za pomocą polecenia debugowania adb. Aby uniemożliwić użytkownikowi odinstalowanie sieci VPN, wywołaj połączenie DevicePolicyManager.setUninstallBlocked

Konfigurowanie usługi VPN

Organizacja, która używa Twojego rozwiązania dla firm na Androida, konfiguruje sieć VPN.

  1. Zainstaluj aplikację VPN, która udostępnia VpnService Aktywne usługi VPN można znaleźć, używając filtra intencji pasującego do argumentu działanie VpnService.SERVICE_INTERFACE
  2. Zadeklaruj VpnService w pliku manifestu aplikacji chronionym przez uprawnienia BIND_VPN_SERVICE
  3. Skonfiguruj VpnService więc jest uruchamiany przez system. Nie ustawiaj automatycznego uruchamiania aplikacji VPN nasłuchiwania rozruchu systemu i kontrolowania własnego cyklu życia.
  4. Ustaw zarządzane konfiguracji dla aplikację VPN (patrz przykład poniżej).

Włączanie stałego połączenia VPN

DPC może skonfigurować zawsze aktywne połączenie VPN przez konkretną aplikację przez połączenia DevicePolicyManager.setAlwaysOnVpnPackage()

To połączenie jest przyznawane automatycznie i jest kontynuowane po ponownym uruchomieniu. Jeśli lockdownEnabled ma wartość fałsz, ruch w sieci może być niezabezpieczony od momentu, telefon uruchomi się ponownie i nawiążesz połączenie z siecią VPN. Przydaje się to, gdy nie chcesz przerywać połączenia z siecią za każdym razem, gdy nastąpi awaria sieci VPN lub sieć VPN nie jest istotna.

Sprawdzanie stałego połączenia VPN

DPC może odczytać nazwę pakietu administrującego zawsze włączoną siecią VPN dla bieżącego użytkownika z DevicePolicyManager.getAlwaysOnVpnPackage().

Jeśli nie ma takiego pakietu lub sieć VPN została utworzona w ustawieniach systemu , zwracana jest wartość null.

Przykład

W aplikacji TestDPC AlwaysOnVpnFragment.java używa tych interfejsów API, aby włączyć ustawienie stałego połączenia VPN.

W tym przykładzie:

  • konfiguracji Usługi VPN są konfigurowane przez DevicePolicyManager za pomocą funkcji setApplicationRestrictions() .
  • Konfiguracje zarządzane używają dowolnych par klucz-wartość i tej przykładowej aplikacji używa ich w innych miejscach do skonfigurowania ustawień sieci VPN (zobacz Sprawdź konfiguracje zarządzane).
  • W przykładzie instalator pakietów na Androida został dodany do listy odrzuconych, więc instalator nie jest blokowany aktualizować pakiety systemowe przez VPN. Cały ruch sieciowy użytkownika w witrynie profil służbowy lub urządzenie przechodzą przez tę aplikację VPN (z wyjątkiem pakietu) instalatora; jego aktualizacje wykorzystują otwarty internet.
  • DevicePolicyManager włączy wtedy zawsze włączone połączenie VPN dla Pakiet VPN za pomocą setAlwaysOnVpnPackage(), i włączenie trybu blokady.

Kotlin

// Set VPN's managed configurations
val config = Bundle().apply {
  putString(Extras.VpnApp.ADDRESS, "192.0.2.0")
  putString(Extras.VpnApp.IDENTITY, "vpn.account1")
  putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate")
  putStringArray(Extras.VpnApp.DENYLIST,
        arrayOf("com.android.packageinstaller"))
}

val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

val admin = myDeviceAdminReceiver.getComponentName(this)

// Name of package to update managed configurations
val vpnPackageName = "com.example.vpnservice"

// Associate managed configurations with DeviceAdminReceiver
dpm.setApplicationRestrictions(admin, vpnPackageName, config)

// Enable always-on VPN connection through VPN package
try {
  val lockdownEnabled = true
  dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled)
} catch (ex: Exception) {
  throw PolicyException()
}

Java

// Set VPN's managed configurations
final Bundle config = new Bundle();
config.putString(Extras.VpnApp.ADDRESS, "192.0.2.0");
config.putString(Extras.VpnApp.IDENTITY, "vpn.account1");
config.putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate");
config.putStringArray(Extras.VpnApp.DENYLIST,
                      new String[]{"com.android.packageinstaller"});

DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

ComponentName admin = myDeviceAdminReceiver.getComponentName(this);

// Name of package to update managed configurations
final String vpnPackageName = "com.example.vpnservice";

// Associate managed configurations with DeviceAdminReceiver
dpm.setApplicationRestrictions(admin, vpnPackageName, config);

// Enable always-on VPN connection through VPN package
try {
  boolean lockdownEnabled = true;
  dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled));
} catch (Exception ex) {
  throw new PolicyException(...);
}

Skonfiguruj jeden identyfikator sieci bezprzewodowej we wszystkich regionach

działające w trybie właściciela urządzenia lub właściciela profilu, zgodnie z zasadami dotyczącymi urządzeń; kontroler (DPC) może powiązać wiele certyfikatów urzędu certyfikacji z jedną konfiguracją sieci bezprzewodowej. Przy tej konfiguracji urządzenie mogą łączyć się z bezprzewodowymi punktami dostępu o tej samej nazwie sieci lub identyfikatora SSID, ale skonfigurowano z innym urzędem certyfikacji certyfikatów. Jest to przydatne, jeśli sieci bezprzewodowe w organizacji są zlokalizowanych w wielu regionach geograficznych, a każdy z nich wymaga innego urzędu certyfikacji. Na przykład podpisy prawne mogą wymagać lokalnego urząd, który wymaga regionalnego urzędu certyfikacji.

Uwaga: Android obsługuje setCaCertificate od wersji API 18 (Jelly Bean), ale administratorzy IT muszą udostępnić swoje sieci oddzielnie z każdym urzędem certyfikacji, aby zapewnić płynne uwierzytelnianie urządzeń w każdym niezależnie od regionu.

Określ certyfikaty CA identyfikujące serwer

Aby określić listę certyfikatów X.509, które identyfikują serwer przy użyciu tego samego Identyfikator SSID, umieść wszystkie odpowiednie urzędy certyfikacji w konfiguracji sieci bezprzewodowej za pomocą WifiEnterpriseConfig.setCaCertificates().

Certyfikat serwera jest ważny, jeśli jego urząd certyfikacji odpowiada jednemu z podanych certyfikatów. Nazwy domyślne są automatycznie przypisywane do certyfikatów i używane w konfiguracji. WifiManager zainstaluje certyfikat i automatycznie zapisze konfigurację, gdy jest włączona i usuwa certyfikat, gdy konfiguracja jest Usunięto.

Aby pobrać wszystkie certyfikaty CA powiązane z konfiguracją sieci bezprzewodowej, użyj WifiEnterpriseConfig.getCaCertificates(), aby zwrócić listę X509Certificate obiektów.

Dodawanie konfiguracji sieci bezprzewodowej przy użyciu wielu certyfikatów CA

  1. Sprawdź tożsamość serwera:
    1. Wczytaj certyfikaty CA X.509.
    2. Wczytaj klucz prywatny i certyfikat klienta. Przykład odczytywania pliku certyfikatu znajdziesz w sekcji Zabezpieczenia HTTPS i SSL.
  2. Utwórz nowy element WifiConfiguration i skonfigurować jego identyfikator SSID oraz zarządzanie kluczami.
  3. Skonfiguruj WifiEnterpriseConfig w instancji WifiConfiguration.
    1. Wskaż serwer na liście X509Certificate obiekty za pomocą setCaCertificates()
    2. Ustaw dane logowania, tożsamość i hasło klienta.
    3. Ustaw protokół Extensible Authentication Protocol (EAP) i metodę Phase 2 jako nawiązywanie kontaktu.
  4. Dodaj sieć z parametrem WifiManager
  5. Włącz sieć. WifiManager automatycznie zapisuje konfigurację podczas konfiguracji.

Ten przykład łączy te kroki:

Kotlin

// Verify the server's identity
val caCert0 = getCaCert("cert0.crt")
val caCert1 = getCaCert("cert1.crt")
val clientKey = getClientKey()
val clientCert = getClientCert()

// Create Wi-Fi configuration
val wifiConfig = WifiConfiguration().apply {
  SSID = "mynetwork"
  allowedKeyManagement.set(KeyMgmt.WPA_EAP)
  allowedKeyManagement.set(KeyMgmt.IEEE8021X)

  // Set up Wi-Fi enterprise configuration
  enterpriseConfig.setCaCertificates(arrayOf<X509Certificate>(caCert0, caCert1))
  enterpriseConfig.setClientKeyEntry(clientKey, clientCert)
  enterpriseConfig.setIdentity("myusername")
  enterpriseConfig.setEapMethod(Eap.TLS)
  enterpriseConfig.setPhase2Method(Phase2.NONE)
}


// Add network
val wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
val netId = wifiManager.addNetwork(wifiConfig)

// Enable network
if (netId < 0) {
  // Error creating new network
} else {
  wifiManager.enableNetwork(netId, true)
}

Java

// Verify the server's identity
X509Certificate caCert0 = getCaCert("cert0.crt");
X509Certificate caCert1 = getCaCert("cert1.crt");
PrivateKey clientKey = getClientKey();
X509Certificate clientCert = getClientCert();

// Create Wi-Fi configuration
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = "mynetwork";
wifiConfig.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
wifiConfig.allowedKeyManagement.set(KeyMgmt.IEEE8021X);

// Set up Wi-Fi enterprise configuration
wifiConfig.enterpriseConfig.setCaCertificates(new X509Certificate[] {caCert0, caCert1});
wifiConfig.enterpriseConfig.setClientKeyEntry(clientKey, clientCert);
wifiConfig.enterpriseConfig.setIdentity("myusername");
wifiConfig.enterpriseConfig.setEapMethod(Eap.TLS);
wifiConfig.enterpriseConfig.setPhase2Method(Phase2.NONE);

// Add network
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
int netId = wifiManager.addNetwork(wifiConfig);

// Enable network
if (netId < 0) {
  // Error creating new network
} else {
  wifiManager.enableNetwork(netId, true);
}

Ustaw osobny telefon na potrzeby profilu służbowego

Możesz dodać do listy dozwolonych oddzielną aplikację telefonu, która ma być używana w profilu służbowym. Może to być aplikacja telefonu lub aplikacja VoIP (Voice over IP) obsługująca ConnectionService Interfejs API backendu wywołującego. Zapewnia to to samo zintegrowane wybieranie w interfejsie systemu aplikacji VoIP w profilu służbowym, i telefonować głównej funkcji. Połączenia przychodzące z kont do połączeń służbowych są od połączeń przychodzących na osobiste konta do połączeń.

Użytkownik może wybrać, czy chcesz nawiązywać i odbierać połączenia za pomocą telefonu służbowego na liście dozwolonych na koncie telefonicznym. wszystkie połączenia nawiązane z tego telefonu lub przychodzące do pracy; są rejestrowane w profilu służbowym CallLog dostawcy usług. Telefon służbowy prowadzi rejestr połączeń przeznaczonych wyłącznie do pracy i ma dostęp wyłącznie do kontaktów służbowych. Przychodzące połączenia z przełącznikiem obwodu są obsługiwane przez główny telefon i przechowywane w osobistym rejestrze połączeń. Po usunięciu profilu służbowego zostanie usunięty rejestr połączeń. powiązany z tym profilem służbowym zostanie też usunięty, i skalowalnych danych.

Aplikacje innych firm muszą obsługiwać ConnectionService.

aplikacje VoIP innych firm, które muszą wykonywać połączenia telefoniczne i je realizować. zintegrowana z wbudowaną aplikacją na telefon może implementować ConnectionService API. Jest to wymagane w przypadku wszystkich usług VoIP używanych do połączeń służbowych. Te aplikacje mogą być traktowani jak tradycyjne połączenia komórkowe, pojawiają się na przykład we wbudowanym telefonie i rejestrze połączeń. Jeśli wdrażanie aplikacji ConnectionService jest zainstalowana w profilu służbowym i tylko przez telefon zainstalowane w tym profilu służbowym.

Gdy programista wdroży ConnectionService, należy dodać go do pliku manifestu aplikacji i zarejestrować PhoneAccount z TelecomManager Konto telefoniczne to osobna metoda nawiązywania lub odbierania połączeń telefonicznych, i dla każdej z nich może być kilka PhoneAccounts ConnectionService Po zarejestrowaniu konta telefonu użytkownik Możesz ją włączyć w ustawieniach telefonu.

Integracja z interfejsem systemu i powiadomienia

Interfejs systemu zapewnia użytkownikom spójny, zintegrowany sposób wybierania numerów w przypadku aplikacji innych firm, które korzystają z ConnectionService API jako backend do wykonywania wywołań. jeśli używasz aplikacji w profilu służbowym, jest wyświetlana przy połączeniach przychodzących i na pasku stanu. Aplikacja, która stosuje Aplikacja ConnectionService zainstalowana w profilu służbowym może używać telefonu systemowego lub stworzyć osobny telefon służbowy. Może to być jedna aplikacja lub i osobnych aplikacji.

Aplikacja Telefon określa, czy nawiązuje lub odbiera połączenie służbowe przez sprawdzanie flagi android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL Jeśli jest to połączenie służbowe, aplikacja telefoniczna poinformuje o tym użytkownika, dodając plakietka służbowa (ikona aktówki):

Kotlin

// Call placed through a work phone account. getCurrentCall() is defined by the
// dialer.
val call = getCurrentCall()
if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) {
  // Set briefcase icon
}

Java

// Call placed through a work phone account. getCurrentCall() is defined by the
// dialer.
Call call = getCurrentCall();
if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) {
  // Set briefcase icon
}