ویژگیهای این راهنما، قابلیتهای مدیریت شبکه و تلفن را که میتوانید در برنامه کنترلکننده خطمشی دستگاه (DPC) خود پیادهسازی کنید، توصیف میکند. این سند حاوی نمونه کد است و همچنین می توانید از برنامه Test DPC به عنوان منبع کد نمونه برای ویژگی های سازمانی اندروید استفاده کنید.
یک برنامه DPC می تواند در حالت مالک نمایه در دستگاه های شخصی یا در حالت مالک دستگاه در دستگاه های کاملاً مدیریت شده اجرا شود. این جدول نشان میدهد که وقتی DPC در حالت مالک نمایه یا حالت مالک دستگاه اجرا میشود، کدام ویژگیها در دسترس هستند:
به مخاطبین کاری در نمایه ها دسترسی داشته باشید
EMM ها می توانند به نمایه شخصی کاربر اجازه دسترسی به مخاطبین کاری او را بدهند تا مخاطبین شخصی و کاری کاربر از طریق جستجوی محلی و جستجوی دایرکتوری از راه دور قابل دسترسی باشند. در دستگاههای شخصی، یک شمارهگیر در نمایه شخصی میتواند تماسهای شخصی و همچنین تماسهای کاری را برقرار و دریافت کند. علاوه بر این، مخاطبین کاری به خوبی در رابط کاربری سیستم یکپارچه شده اند. اگر نمایه کاری رمزگذاری شده باشد، دادههای آن برای نمایه شخصی در دسترس نیست.
با رابط کاربری سیستم یکپارچه شده است
رابط کاربری سیستم تماسهای کاری ورودی را با استفاده از نماد کیف پول نشان میدهد. callLog
همچنین نمادی را برای تعیین تماس های کاری ورودی و خروجی نشان می دهد. شمارهگیر شخصی و برنامههای مخاطب میتوانند اطلاعات شناسه تماسگیرنده یک مخاطب کاری را با استفاده از جستجوی فهرست راه دور نمایش دهند، بنابراین لازم نیست که مخاطب قبلاً در دستگاه محلی همگامسازی شده باشد. برنامه پیام رسانی می تواند شناسه تماس گیرنده محلی و جستجو را انجام دهد.
سند تعریف سازگاری Android (CDD) شامل الزاماتی برای نمایش مخاطبین کاری در شمارهگیر پیشفرض، و الزاماتی است که مخاطبین و برنامههای پیامرسان دارای نشان هستند تا نشان دهند که از نمایه کاری هستند.
مخاطبین کاری قابل دسترسی و جستجو هستند
کاربر می تواند از نمایه شخصی خود که در صفحه جستجوی برنامه شماره گیر نمایش داده می شود، به مخاطبین کاری دسترسی داشته باشد و با آنها تماس بگیرد. کاربر میتواند مخاطبین کاری را - با استفاده از تکمیل خودکار - که به صورت محلی با دستگاه همگامسازی شدهاند و از طریق جستجوی فهرست راه دور فهرست شدهاند، جستجو کند.
مخاطبین کاری را در نمایه اصلی کنترل کنید
DPC مجوز جستجوی مخاطبین کاری را کنترل می کند. DPC که در حالت مالک نمایه اجرا می شود، نمایان بودن مخاطبین کاری را در نمایه شخصی مدیریت می کند. برای اطلاعات بیشتر، به ساخت کنترلر خط مشی دستگاه مراجعه کنید.
جستجوی مخاطبین کاری با نمایه شخصی به طور پیش فرض فعال است.
برای مشاهده نحوه تنظیم این خطمشی، از
DevicePolicyManager.getCrossProfileContactsSearchDisabled()
استفاده کنید.برای فعال یا غیرفعال کردن جستجوی مخاطبین کاری با نمایه شخصی، از
DevicePolicyManager.setCrossProfileContactsSearchDisabled()
استفاده کنید.
از اتصال شبکه ایمن برای ترافیک کاری اطمینان حاصل کنید
کنترلکننده خطمشی دستگاه که در حالت مالک دستگاه یا حالت مالک نمایه اجرا میشود، میتواند از اتصال شبکه خصوصی مجازی (VPN) همیشه روشن استفاده کند تا برنامهها را مجبور کند که ترافیک را از طریق یک برنامه VPN مشخص که قابل دور زدن نیست، عبور دهد. با استفاده از یک اتصال VPN همیشه روشن، DPC می تواند اطمینان حاصل کند که ترافیک شبکه از نمایه کاری یا دستگاه مدیریت شده از طریق یک سرویس VPN و بدون دخالت کاربر عبور می کند. این فرآیند یک اتصال شبکه ایمن برای ترافیک مداوم در یک نمایه کاری ایجاد می کند.
درباره اتصالات VPN همیشه روشن
به عنوان بخشی از چارچوب سیستم، مسیریابی VPN به طور خودکار مدیریت می شود تا کاربر نتواند سرویس VPN را دور بزند. اگر سرویس VPN در حالت قفل قطع شود، ترافیک نمی تواند به اینترنت باز نشت کند. برای برنامههایی که VpnService
پیادهسازی میکنند، VPN همیشه روشن چارچوبی برای مدیریت یک اتصال VPN ایمن از طریق یک سرور قابل اعتماد و حفظ آن فراهم میکند. سرویس VPN بدون در نظر گرفتن اینکه اتصال از طریق Wi-Fi یا تلفن همراه باشد، به طور خودکار اتصال را در بین بهروزرسانیهای برنامه راهاندازی مجدد میکند. و اگر دستگاه راه اندازی مجدد شود، چارچوب اتصال VPN را مجددا راه اندازی می کند.
اتصال به سرویس VPN برای کاربر شفاف است. برای یک دستگاه متعلق به شرکت، کاربر نیازی به تأیید گفتگوی رضایت برای VPN در حالت همیشه روشن ندارد. تنظیمات شبکه VPN کاربر امکان فعال کردن اتصال همیشه روشن را به صورت دستی می دهد.
اگر DISALLOW_CONFIG_VPN
true
باشد، کاربر از پیکربندی VPN جلوگیری میکند. DISALLOW_DEBUGGING_FEATURES
را فعال کنید تا کاربران را از لغو VPN همیشه روشن با استفاده از دستور اشکال زدایی adb محدود کنید. برای جلوگیری از حذف نصب VPN توسط کاربر، با DevicePolicyManager.setUninstallBlocked
تماس بگیرید.
سرویس VPN را راه اندازی کنید
سازمانی که از راه حل سازمانی شما برای Android استفاده می کند VPN را راه اندازی می کند.
- یک برنامه VPN را نصب کنید که
VpnService
را پیاده سازی می کند. میتوانید با استفاده از فیلتر هدف که با عملکردVpnService.SERVICE_INTERFACE
مطابقت دارد، خدمات VPN فعال را پیدا کنید. - یک
VpnService
در مانیفست برنامه اعلام کنید که توسط مجوزBIND_VPN_SERVICE
محافظت می شود. -
VpnService
را پیکربندی کنید تا توسط سیستم راه اندازی شود. از تنظیم برنامه VPN برای شروع خود با گوش دادن به بوت سیستم و کنترل چرخه عمر خود خودداری کنید. - تنظیمات مدیریت شده را برای برنامه VPN تنظیم کنید (به مثال زیر مراجعه کنید).
اتصال VPN همیشه روشن را فعال کنید
DPC میتواند با فراخوانی DevicePolicyManager.setAlwaysOnVpnPackage()
یک اتصال VPN همیشه روشن را از طریق یک برنامه خاص پیکربندی کند.
این اتصال به طور خودکار اعطا می شود و پس از راه اندازی مجدد ادامه می یابد. اگر lockdownEnabled
نادرست باشد، ممکن است از زمان راهاندازی مجدد تلفن و اتصال VPN، ترافیک شبکه ایمن نباشد. اگر نمیخواهید هر زمان که VPN از کار بیفتد، اتصال شبکه را متوقف کنید، یا اگر VPN ضروری نیست، این کار مفید است.
اتصال VPN همیشه روشن را تأیید کنید
DPC میتواند نام بسته را بخواند که یک اتصال VPN همیشه روشن را برای کاربر فعلی با DevicePolicyManager.getAlwaysOnVpnPackage() .
اگر چنین بسته ای وجود نداشته باشد، یا VPN در برنامه تنظیمات سیستم ایجاد شده باشد، null
برگردانده می شود.
مثال
در برنامه TestDPC ، AlwaysOnVpnFragment.java
از این APIها برای فعال کردن تنظیمات اتصال VPN همیشه روشن استفاده می کند.
در مثال زیر:
- تنظیمات مدیریت شده سرویس VPN توسط
DevicePolicyManager
با استفاده از روشsetApplicationRestrictions()
تنظیم می شود. - پیکربندیهای مدیریتشده از جفتهای کلید-مقدار دلخواه استفاده میکنند و این برنامه نمونه از آنها در جای دیگری برای پیکربندی تنظیمات شبکه VPN استفاده میکند (به بررسی تنظیمات مدیریتشده مراجعه کنید).
- این مثال نصب کننده بسته Android را به فهرست انکار اضافه می کند تا بسته های سیستم را از طریق VPN به روز نمی کند. تمام ترافیک شبکه کاربر در نمایه کاری یا دستگاه از طریق این برنامه VPN انجام می شود، به جز نصب کننده بسته. به روز رسانی های آن از اینترنت باز استفاده می کنند.
- سپس
DevicePolicyManager
با استفاده ازsetAlwaysOnVpnPackage()
و فعال کردن حالت قفل، اتصال VPN همیشه روشن را برای بسته VPN فعال می کند.
کاتلین
// 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() }
جاوا
// 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(...); }
یک شناسه شبکه بی سیم واحد را در سراسر مناطق تنظیم کنید
یک کنترلکننده خط مشی دستگاه (DPC) که در حالت مالک دستگاه یا مالک نمایه اجرا میشود، میتواند چندین گواهی مرجع گواهی (CA) را با یک پیکربندی شبکه بیسیم منفرد مرتبط کند. با این پیکربندی، دستگاه میتواند به نقاط دسترسی بیسیمی متصل شود که نام شبکه یا شناسه مجموعه سرویس (SSID) یکسانی دارند، اما با گواهیهای CA مختلف پیکربندی شدهاند. این در صورتی مفید است که شبکه های بی سیم سازمان شما در چندین منطقه جغرافیایی واقع شده باشند و هر منطقه به یک مرجع گواهی متفاوت نیاز دارد. به عنوان مثال، امضای قانونی می تواند به یک مقام محلی نیاز داشته باشد که به یک CA منطقه ای نیاز دارد.
توجه: Android از API 18 (Jelly Bean) setCaCertificate
پشتیبانی میکند، اما مدیران فناوری اطلاعات باید شبکههای خود را بهطور جداگانه با هر CA ارائه کنند تا مطمئن شوند دستگاهها بدون در نظر گرفتن منطقهشان احراز هویت یکپارچه در هر نقطه دسترسی دارند.
گواهینامه های CA را برای شناسایی سرور مشخص کنید
برای تعیین لیستی از گواهیهای X.509 که سرور را با استفاده از همان SSID شناسایی میکند، با استفاده از WifiEnterpriseConfig.setCaCertificates()
همه CAهای مربوطه را در پیکربندی بیسیم قرار دهید.
گواهی سرور در صورتی معتبر است که CA آن با یکی از گواهی های داده شده مطابقت داشته باشد. نامهای پیشفرض بهطور خودکار به گواهیها اختصاص داده میشوند و در پیکربندی استفاده میشوند. WifiManager
گواهی را نصب می کند و هنگامی که شبکه فعال است پیکربندی را به طور خودکار ذخیره می کند و هنگامی که پیکربندی حذف می شود گواهی را حذف می کند.
برای دریافت تمام گواهیهای CA مرتبط با پیکربندی بیسیم، از WifiEnterpriseConfig.getCaCertificates()
برای بازگرداندن لیستی از اشیاء گواهی X509Certificate
استفاده کنید.
با استفاده از چندین گواهی CA یک پیکربندی بی سیم اضافه کنید
- تایید هویت سرور:
- گواهینامه های X.509 CA را بارگیری کنید.
- کلید خصوصی و گواهی مشتری را بارگیری کنید. برای مثالی از نحوه خواندن فایل گواهی ، امنیت با HTTPS و SSL را ببینید.
- یک
WifiConfiguration
جدید ایجاد کنید و SSID و مدیریت کلید آن را تنظیم کنید. - نمونه
WifiEnterpriseConfig
را در اینWifiConfiguration
تنظیم کنید.- سرور را با لیستی از اشیاء
X509Certificate
با استفاده ازsetCaCertificates()
شناسایی کنید. - اعتبار مشتری، هویت و رمز عبور را تنظیم کنید.
- پروتکل تأیید اعتبار توسعه پذیر (EAP) و روش فاز 2 را به عنوان بخشی از برقراری اتصال تنظیم کنید.
- سرور را با لیستی از اشیاء
- شبکه را با
WifiManager
اضافه کنید. - شبکه را فعال کنید WifiManager به طور خودکار پیکربندی را در حین راه اندازی ذخیره می کند.
این مثال مراحل را با هم پیوند می دهد:
کاتلین
// 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) }
جاوا
// 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); }
یک شماره گیر جداگانه برای پروفایل کاری تعیین کنید
میتوانید یک برنامه شمارهگیر جداگانه را برای استفاده در نمایه کاری فهرست کنید. این میتواند خود شمارهگیر یا یک برنامه Voice over IP (VoIP) باشد که رابط برنامهنویسی ConnectionService
برای بخش پشتیبان تماس پیادهسازی میکند. این همان تجربه شماره گیری UI سیستم یکپارچه را برای برنامه های VoIP در نمایه کاری فراهم می کند و به طور موثر شماره گیر کاری را به یک ویژگی اصلی تبدیل می کند. تماسهای ورودی به حسابهای تماس کاری از تماسهای ورودی به حسابهای تماس شخصی متمایز میشوند.
کاربر می تواند انتخاب کند که از شماره گیر کار لیست مجاز در یک حساب تلفن تماس برقرار کرده و دریافت کند. همه تماسهای برقرار شده از آن شمارهگیر یا ورودی به حساب تلفن کار، در ارائهدهنده CallLog
نمایه کاری ثبت میشوند. شمارهگیر کار یک گزارش تماس فقط کار را با دسترسی فقط به مخاطبین کاری نگهداری میکند. تماسهای کلید مدار ورودی توسط شمارهگیر اصلی مدیریت میشوند و در یک گزارش تماس شخصی ذخیره میشوند. اگر نمایه کاری حذف شود، گزارش تماس مرتبط با آن نمایه کاری نیز مانند تمام دادههای نمایه کاری حذف میشود.
برنامه های شخص ثالث باید ConnectionService را پیاده سازی کنند
برنامههای VoIP شخص ثالث که نیاز به برقراری تماسهای تلفنی دارند و آن تماسها را در برنامه تلفن داخلی ادغام میکنند، میتوانند ConnectionService
API را پیادهسازی کنند. این برای هر سرویس VoIP مورد استفاده برای تماس کاری مورد نیاز است. این برنامهها با برخورد با تماسهایشان مانند تماسهای سلولی سنتی سود میبرند، برای مثال، در شمارهگیر سیستم داخلی و گزارش تماس نشان داده میشوند. اگر برنامه اجرای ConnectionService
در نمایه کاری نصب شده باشد، فقط توسط شماره گیر نصب شده در آن نمایه کاری قابل دسترسی است.
هنگامی که توسعهدهنده ConnectionService
پیادهسازی کرد، باید آن را به فایل مانیفست برنامه اضافه کند و یک PhoneAccount
در TelecomManager
ثبت کند. یک حساب تلفن نشان دهنده یک روش متمایز برای برقراری یا دریافت تماس های تلفنی است و می تواند چندین PhoneAccounts
برای هر ConnectionService
وجود داشته باشد. پس از ثبت حساب تلفن، کاربر می تواند آن را از طریق تنظیمات شماره گیر فعال کند.
یکپارچه سازی رابط کاربری سیستم و اعلان ها
رابط کاربری سیستم یک تجربه شماره گیری ثابت و یکپارچه را برای برنامه های شخص ثالثی که از ConnectionService
API به عنوان پشتیبان برای برقراری تماس استفاده می کنند، به کاربران ارائه می دهد. اگر از برنامه در نمایه کاری استفاده می کنید، نماد کیف در تماس های دریافتی و در نوار وضعیت نمایش داده می شود. برنامهای که ConnectionService
که در نمایه کاری نصب شده است پیادهسازی میکند، میتواند از شمارهگیر سیستم استفاده کند یا یک شمارهگیر کاری جداگانه بسازد. اینها می توانند یک برنامه واحد یا برنامه های جداگانه باشند.
برنامه شماره گیر با بررسی پرچم android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL
تعیین می کند که آیا تماس کاری برقرار می کند یا دریافت می کند. اگر تماس یک تماس کاری باشد، شماره گیر با افزودن یک نشان کاری (نماد کیف) این را به کاربر نشان می دهد:
کاتلین
// 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 }
جاوا
// 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 }