Bu kılavuzdaki özellikler ağ ve telefon yönetimini açıklar cihaz politikanızda uygulayabileceğiniz özellikler denetleyici (DPC) uygulaması olabilir. Bu dokümanda kod var test etmek için kullanabilirsiniz. Test DPC uygulamasını Android'in kurumsal özellikleri için örnek kod kaynağı.
Bir DPC uygulaması kişisel cihazlarda veya cihaz sahibinde profil sahibi modunda çalışabilir modunda kullanabilirsiniz. Bu tabloda, hangi özelliklerin DPC, profil sahibi modunda veya cihaz sahibi modunda çalıştığında kullanılabilir mod:
Özellik | Profil sahibi | Cihaz sahibi |
İş kişilerine erişim farklı profillerde | ✓ | |
iş trafiği için güvenli ağ bağlantısı | ✓ | ✓ |
Bir tüm bölgelerde tek bir kablosuz ağ kimliği | ✓ | ✓ |
Bir iş profili için ayrı bir numara çevirici | ✓ |
Farklı profillerde iş kişilerine erişme
EMM'ler, bir kullanıcının kişisel profilinin iş kişilerine erişmesine izin verebilir. Böylece, bir kullanıcının özel ve iş kişilerine yerel arama ve uzak dizin araması. Kişisel cihazlarda, kişisel modda tek bir numara çevirici profili, iş aramalarının yanı sıra kişisel aramalar yapıp gelen aramaları yanıtlayabilir. Ayrıca, İşle ilgili iletişim bilgileri sistem arayüzüne iyi bir şekilde entegre edilmiştir. İş profili şifrelenmişse verileri kişisel profilde kullanılamaz.
Sistem kullanıcı arayüzüyle entegre
Sistem kullanıcı arayüzü, gelen iş aramalarını evrak çantası simgesiyle gösterir. İlgili içeriği oluşturmak için kullanılan
callLog
ayrıca şunları da gösterir:
simgesi (gelen ve giden iş aramalarını belirtmek için) Kişisel numara çevirici ve
kişi uygulamaları uzaktan kumanda kullanarak bir iş kişisinin arayan kimliği bilgilerini görüntüleyebilir
Böylece, kişinin Google Hesabı’nda senkronize edilmiş olması gerekmez.
yerel cihaz. Mesajlaşma uygulaması yerel arayan kimliği ve arama yapabilir.
Android Uyumluluğu Tanımı Doküman (CDD) şartları içeriyor varsayılan numara çeviricide görüntülenmesini sağlayan iş kişilerine ve Kişiler ve mesajlaşma uygulamaları, işten geldiklerini belirtmek için rozetle işaretlenmiştir seçin.
İş kişileri erişilebilir ve aranabilir
Kullanıcı, kişisel profilinden iş kişilerine erişebilir ve bu kişileri arayabilir. Bu bilgiler, numara çevirici uygulamasının arama ekranında görüntülenir. Kullanıcı iş araması yapabilir otomatik tamamlama kullanan, cihazla yerel olarak senkronize edilen ve uzaktan dizin araması yapabilirsiniz.
Birincil profilde iş kişilerini kontrol etme
İş kişilerinde arama yapma izni DPC tarafından kontrol edilir. Profil sahibinde çalışıyor modunda, DPC iş kişilerinin kişisel profildeki görünürlüğünü yönetir. Daha fazla bilgi için Cihaz politikası oluşturma bölümüne bakın denetleyici aracılığıyla kontrol edebilirsiniz.
İş kişilerini kişisel profile göre arama özelliği varsayılan olarak etkindir.
Politikanın nasıl ayarlandığını görmek için şunu kullanın:
DevicePolicyManager.getCrossProfileContactsSearchDisabled()
Kişisel profile göre iş kişileri aramayı etkinleştirmek veya devre dışı bırakmak için şunu kullanın:
DevicePolicyManager.setCrossProfileContactsSearchDisabled()
İş trafiği için güvenli bir ağ bağlantısı sağlama
Cihaz sahibi modunda veya profil sahibi modunda çalışan bir cihaz politikası her zaman açık Sanal Özel Ağ (VPN) bağlantısını kullanarak uygulamaları, trafiği belirli bir VPN uygulamasından geçirmeye zorlamak için atlandı. DPC, her zaman açık VPN bağlantısı kullanarak ağın Bir iş profilinden veya yönetilen cihazdan gelen trafiğin bir VPN hizmetinden geçtiği ve en iyi uygulamaları paylaşacağız. Bu işlem güvenli bir ağ bağlantısı oluşturur. bir hiyerarşiye sokan bir araçtır.
Her zaman açık VPN bağlantıları hakkında
Sistem çerçevesinin bir parçası olarak, VPN yönlendirmesi otomatik olarak yönetilir.
Kullanıcı VPN hizmetini atlayamaz. Uygulama açıkken VPN hizmetinin bağlantısı kesilirse
tam kilitleme modunda ise trafik açık internete sızdıramaz. Uygulamalar için
uygulamak
VpnService
,
Her zaman açık VPN, VPN bağlantısının güvenli bir şekilde yönetilmesi için bir çerçeve sunar.
ayakta tutmak için iyi bir fırsattır. VPN hizmeti, otomatik olarak yeniden başlatılacak
güncellemeler arasında bağlantı kurun. Bağlantı, kablosuz ağ veya
Hücresel'i tıklayın. Cihaz yeniden başlatılırsa çerçeve, VPN bağlantısını yeniden başlatır.
VPN hizmetine giden bağlantı, kullanıcı açısından şeffaftır. Örneğin, bir izin iletişim kutusunu onaylamak için kullanıcının VPN her zaman açık modda. Kullanıcının VPN ağ ayarları, her zaman açık bağlantıyı manuel olarak devre dışı bırakabilirsiniz.
Eğer DISALLOW_CONFIG_VPN
ise
true
ise kullanıcının VPN'yi yapılandırması engellendi. Etkinleştir
DISALLOW_DEBUGGING_FEATURES
.
kullanıcıların adb hata ayıklama komutunu kullanarak her zaman açık VPN'yi geçersiz kılmasını kısıtlamanızı sağlar.
Kullanıcının VPN'yi kaldırmasını engellemek için şu numarayı arayın:
DevicePolicyManager.setUninstallBlocked
VPN hizmetini ayarlama
Android için kurumsal çözümünüzü kullanan kuruluş, VPN'yi ayarlar.
- Aşağıdakileri uygulayan bir VPN uygulaması yükleyin:
VpnService
Şununla eşleşen bir intent filtresi kullanarak etkin VPN hizmetlerini bulabilirsiniz: işlemVpnService.SERVICE_INTERFACE
- Tanımlayın
VpnService
. izni tarafından korunan uygulama manifest dosyasındaBIND_VPN_SERVICE
. - Şunu yapılandır:
VpnService
. sistem tarafından başlatılıyor. VPN uygulamasını kendi kendine başlayacak şekilde ayarlamaktan kaçının çalışmasını dinleme ve kendi yaşam döngüsünü kontrol etme şeklinde özetlenebilir. - Yönetilen yapılandırma VPN uygulaması (aşağıdaki örneğe bakın).
Her zaman açık VPN bağlantısını etkinleştir
DPC, belirli bir uygulama üzerinden her zaman açık VPN bağlantısını yapılandırabilir.
arama
DevicePolicyManager.setAlwaysOnVpnPackage()
Bu bağlantı otomatik olarak verilir ve yeniden başlatma sonrasında da devam eder. Eğer
lockdownEnabled
yanlıştır. Ağ trafiği şu andan itibaren güvenli olmayabilir:
telefonunuzu yeniden başlatır ve VPN bağlanır. Sürekli iyileştirme yapmak istemiyorsanız
VPN başarısız olduğunda veya VPN gerekli değilse ağ bağlantısını kullanmaya devam edebilir.
Her zaman açık VPN bağlantısını doğrulama
DPC, her zaman açık VPN'yi yöneten paketin adını okuyabilir
geçerli kullanıcı için
DevicePolicyManager.getAlwaysOnVpnPackage().
.
Böyle bir paket yoksa veya VPN, sistem Ayarları'nda oluşturulmuşsa
null
döndürüldü.
Örnek
AlwaysOnVpnFragment.java
, TestDPC uygulamasında her zaman açık VPN bağlantısı ayarını etkinleştirmek için bu API'leri kullanır.
Aşağıdaki örnekte:
- Yönetilen
yapılandırmanın
VPN hizmeti
DevicePolicyManager
CANNOT TRANSLATEsetApplicationRestrictions()
yöntemidir. - Yönetilen yapılandırmalarda rastgele anahtar/değer çiftleri ve bu örnek uygulama kullanılır VPN'nin ağ ayarlarını yapılandırmak için başka bir yerde kullanır (bkz. Yönetilen Yapılandırmaları Kontrol Edin).
- Örnekte, Android paket yükleyici bir ret listesine eklenir. Böylece yükleyicinin VPN üzerinden sistem paketlerini güncelleme. Kullanıcının tüm ağ trafiği iş profili veya cihaz, paket hariç bu VPN uygulamasından geçer yükleyici; açık interneti kullanıyor.
- Ardından
DevicePolicyManager
, Şunu kullanan VPN paketi:setAlwaysOnVpnPackage()
, ve tam kilitleme modunu etkinleştirin.
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(...); }
Bölgeler arasında tek bir kablosuz ağ kimliği oluşturun
Cihaz sahibi modunda veya profil sahibi modunda çalışan bir cihaz politikası denetleyici (DPC) birden fazla sertifika yetkilisi (CA) sertifikasını ilişkilendirebilir tek bir kablosuz ağ yapılandırmasıyla kullanabilirsiniz. Bu yapılandırmada bir cihaz aynı ağ adına sahip kablosuz erişim noktalarına bağlanabiliyor veya hizmet seti tanımlayıcısı (SSID) kullanılmasına rağmen farklı CA ile yapılandırılmıştır ekleyebilirsiniz. Bu özellik, kuruluşunuzun kablosuz ağları birden fazla coğrafi bölgede bulunuyor ve her bölge için farklı bir sertifika yetkilisizdir. Örneğin, yasal imzalar için yetkili bir kurum yetkilisiz.
Not: Android tarafından desteklenenler
setCaCertificate
API 18'den (Jelly Bean) itibaren kullanılabilir, ancak BT yöneticilerinin ağlarını
için her sertifika yetkilisiyle ayrı ayrı bağlanarak
erişim noktalarından yararlanabilmeniz gerekir.
Sunucuyu tanımlamak için CA sertifikalarını belirtin
Sunucuyu tanımlayan X.509 sertifikalarının listesini belirtmek için
SSID, WifiEnterpriseConfig.setCaCertificates()
kullanarak kablosuz yapılandırmadaki ilgili tüm CA'ları ekleyin.
Sertifikanın CA'sı, belirtilen sertifikalarla eşleşirse sunucunun sertifikası geçerlidir.
Varsayılan adlar sertifikalara otomatik olarak atanır ve
yapılandırma. İlgili içeriği oluşturmak için kullanılan
WifiManager
.
Sertifikayı yükler ve
ağ etkinleştirildiğinde ve yapılandırma devre dışı bırakıldığında sertifikayı kaldırır.
silindi.
Kablosuz yapılandırmayla ilişkili tüm CA sertifikalarını almak için
Aşağıdakileri içeren listeyi döndürmek için WifiEnterpriseConfig.getCaCertificates()
X509Certificate
nesne.
Birden çok CA sertifikası kullanarak kablosuz yapılandırma ekleme
- Sunucunun kimliğini doğrulayın:
- X.509 CA sertifikalarını yükleyin.
- İstemcinin özel anahtarını ve sertifikasını yükleyin. Sertifika dosyasının nasıl okunacağına ilişkin bir örnek için HTTPS ve SSL ile güvenlik başlıklı makaleye bakın.
- Yeni oluştur
WifiConfiguration
. SSID ve anahtar yönetimini ayarlayın. - Ayarlayın:
WifiEnterpriseConfig
. örneği hakkında daha fazla bilgi edinin.WifiConfiguration
- Sunucuyu
X509Certificate
. nesnelerisetCaCertificates()
. - İstemci kimlik bilgilerini, kimliğini ve şifresini belirleyin.
- Genişletilebilir Kimlik Doğrulama Protokolü (EAP) ve Aşama 2 yöntemini şu şekilde ayarlayın: bağlantı kurmanın bir bölümüdür.
- Sunucuyu
- Ağı
WifiManager
- Ağı etkinleştirin. WifiManager, yapılandırma sırasında kurulumu.
Şu örnek bu adımları birbirine bağlar:
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); }
İş profili için ayrı bir numara çevirici belirtin
İş profilinde kullanılacak ayrı bir numara çevirici uygulamasını izin verilenler listesine ekleyebilirsiniz.
Bu, numara çeviricinin kendisi veya
ConnectionService
.
Çağrı yapan arka uç için API. Bu, aynı entegre sistem kullanıcı arayüzü çevirisini sağlar.
iş profilinde VoIP uygulamalarına dair deneyim kazanarak
bir temel özelliğe sahiptir. İş görüşmesi hesaplarına gelen aramalar
gelen aramalardan kişisel arama hesaplarına göre ayrılır.
Kullanıcı izin verilenler listesindeki iş çeviricisini kullanarak arama yapmayı ve almayı tercih edebilir.
oturum açın. O numara çeviriciden yapılan veya işe gelen tüm aramalar
iş profilinin hesabına kaydedilir.
CallLog
.
sağlar. İş numara çevirici, yalnızca
iş iletişim bilgileri. Gelen devre geçişi çağrıları birincil numara çevirici tarafından işlenir
ve kişisel bir çağrı kaydında saklanır. İş profili silinirse çağrı kaydı
o iş profiliyle ilişkilendirilmiş ve tüm iş profiliyle ilişkilendirilmiş veriler de silinir.
dışı verilerdir.
Üçüncü taraf uygulamaları, ConnectionService'i uygulamalıdır
Telefon araması yapması ve bu aramaları yapması gereken üçüncü taraf VoIP uygulamaları
yerleşik telefon uygulamasına entegre ederek
ConnectionService
.
API'ye gidin. Bu, iş görüşmesinde kullanılan tüm VoIP hizmetleri için gereklidir. Bu uygulamalar
aramaları geleneksel cep telefonu aramaları gibi ele alınarak
dahili numara çeviricide ve arama kaydında görünürler. Öğe
uygulama
ConnectionService
.
iş profilinde yüklüyse, yalnızca çevirici tarafından erişilebilir ve
iş profilinde yüklü olmalıdır.
Geliştirici, uygulamayı
ConnectionService
,
bunu uygulamanın manifest dosyasına eklemeli ve
PhoneAccount
şununla:
TelecomManager
.
Telefon hesabı, telefon araması yapmak veya almak için farklı bir yöntemi temsil eder.
Ayrıca her biri için birden fazla PhoneAccounts
olabilir
ConnectionService
. Telefon hesabı kaydedildikten sonra kullanıcı
numara çevirici ayarlarından etkinleştirebilir.
Sistem kullanıcı arayüzü entegrasyonu ve bildirimler
Sistem kullanıcı arayüzü, kullanıcılara tutarlı ve entegre bir arama deneyimi sunar.
kullanan üçüncü taraf uygulamaları için
ConnectionService
.
Çağrı yapmak için arka uç olarak API. Uygulamayı bir iş profilinde kullanıyorsanız evrak çantası
simgesi, gelen aramalarda ve durum çubuğunda görüntülenir. Bir projenin
İş profilinde yüklü olan ConnectionService
,
veya iş için ayrı bir numara çevirici oluşturabilirsiniz. Bunlar tek bir uygulama veya
ayrı uygulamalar.
Çevirici uygulama, bir çağrının
bayrağı kontrol ediyor
android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL
Çağrı bir iş çağrısıysa, çevirici bir
iş rozeti (evrak çantası simgesi):
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 }