تصف الميزات الواردة في هذا الدليل إمكانات إدارة الشبكات والاتصالات التي يمكنك تنفيذها في تطبيق وحدة التحكّم بسياسة الجهاز (DPC). يحتوي هذا المستند على نماذج للرموز ويمكنك أيضًا استخدام تطبيق اختبار وحدة التحكّم بسياسة الجهاز (DPC) كمصدر نموذج لرموز برمجية لميزات المؤسسة من Android.
يمكن تشغيل تطبيق وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي على الأجهزة الشخصية أو في وضع مالك الجهاز على الأجهزة المُدارة بالكامل. يشير هذا الجدول إلى الميزات المتاحة عند تشغيل وحدة التحكّم بسياسة الجهاز في وضع مالك الملف الشخصي أو وضع مالك الجهاز:
الميزة | مالك الملف الشخصي | مالك الجهاز |
الوصول إلى جهات اتصال العمل على جميع الملفات | ✓ | |
ضمان اتصال شبكة آمن لحركة مرور العمل | ✓ | ✓ |
إعداد معرّف شبكة لاسلكية واحد في جميع المناطق | ✓ | ✓ |
تحديد برنامج اتصال منفصل للملف الشخصي للعمل | ✓ |
الوصول إلى جهات اتصال العمل على جميع الملفات الشخصية
يمكن أن تسمح إدارة الخدمات الجوّالة للمؤسسات (EMM) للملف الشخصي للمستخدم بالوصول إلى جهات اتصال العمل لكي يتسنى الوصول إلى جهات الاتصال الشخصية وجهات اتصال العمل من خلال البحث المحلي والبحث عن الدليل عن بُعد. على الأجهزة الشخصية، يمكن لمتصل واحد في الملف الشخصي إجراء المكالمات الشخصية وتلقيها، بالإضافة إلى مكالمات العمل. بالإضافة إلى ذلك، يتم دمج جهات اتصال العمل بشكل جيد في واجهة مستخدم النظام. إذا كان الملف الشخصي للعمل مشفّرًا، لن تكون بياناته متاحة للملف الشخصي.
متكامل مع واجهة مستخدم النظام
تشير واجهة مستخدم النظام إلى مكالمات العمل الواردة باستخدام رمز حقيبة أوراق. يعرض
callLog
أيضًا الرمز
لتخصيص مكالمات العمل الواردة والصادرة. يمكن لتطبيق الاتصال الشخصي
وتطبيق جهات الاتصال عرض معلومات معرف المتصل لجهة اتصال العمل باستخدام بحث
دليل عن بُعد، لذلك ليس مطلوبًا أن تتم مزامنة جهة الاتصال بالفعل على
الجهاز المحلي. يمكن لتطبيق المراسلة إجراء إظهار رقم المتّصل والبحث محليًا.
يتضمن مستند تعريف التوافق مع Android (CDD) متطلبات لعرض جهات اتصال العمل في برنامج الاتصال التلقائي والمتطلبات التي تتطلب وضع شارة لجهات الاتصال وتطبيقات المراسلة للإشارة إلى أنّها واردة من الملف الشخصي للعمل.
جهات اتصال العمل قابلة للوصول إليها والبحث فيها
يمكن للمستخدم الوصول إلى جهات اتصال العمل والاتصال بها من ملفه الشخصي، والذي يظهر في شاشة البحث في تطبيق برنامج الاتصال. ويمكن للمستخدم البحث عن جهات اتصال العمل - باستخدام الإكمال التلقائي - التي تتم مزامنتها محليًا مع ال��هاز، وإدراجها من خلال البحث عن الدليل البعيد.
التحكُّم في جهات اتصال العمل في الملف الشخصي الأساسي
وتتحكّم وحدة التحكّم بسياسة الجهاز في إذن البحث في جهات اتصال العمل. في وضع مالك الملف الشخصي، يدير وحدة التحكّم بسياسة الجهاز إمكانية رؤية جهات اتصال العمل في الملف الشخصي. لمزيد من المعلومات، راجع إنشاء وحدة تحكم في سياسة الجهاز.
يكون البحث في جهات اتصال العمل حسب الملف الشخصي مفعَّلاً تلقائيًا.
للاطّلاع على طريقة ضبط السياسة، يمكنك استخدام
DevicePolicyManager.getCrossProfileContactsSearchDisabled()
.لتفعيل ميزة البحث في جهات اتصال العمل حسب الملف الشخصي أو إيقافها، استخدِم
DevicePolicyManager.setCrossProfileContactsSearchDisabled()
.
التأكُّد من توفُّر اتصال شبكة آمن لحركة مرور العمل
عند التشغيل في وضع مالك الجهاز أو وضع مالك الملف الشخصي، يمكن لوحدة التحكّم بسياسة الجهاز استخدام اتصال شبكة افتراضية خاصة (VPN) قيد التشغيل دائمًا لفرض مرور التطبيقات على حركة البيانات من خلال تطبيق شبكة افتراضية خاصة لا يمكن تجاوزه. باستخدام اتصال شبكة VPN قيد التشغيل دائمًا، يمكن لوحدة التحكّم بسياسة الجهاز أن تضمن مرور حركة بيانات الشبكة من ملف شخصي للعمل أو جهاز مُدار عبر خدمة شبكة VPN، وبدون تدخل المستخدم. تنشئ هذه العملية اتصالاً آمنًا بالشبكة لحركة المرور المستمرة داخل الملف الشخصي للعمل.
لمحة عن اتصالات الشبكة الافتراضية الخاصة (VPN) التي يتم تشغيلها دائمًا
كجزء من إطار عمل النظام، تتم إدارة توجيه شبكة VPN تلقائيًا حتى
لا يمكن للمستخدم تجاوز خدمة الشبكة الافتراضية الخاصة. إذا كانت خدمة VPN غير متصلة أثناء استخدام
وضع التأمين، فلن تسرب حركة البيانات إلى الإنترنت المفتوح. بالنسبة إلى التطبيقات
التي تفعِّل
VpnService
،
توفّر شبكة VPN التي تكون قيد التشغيل دائمًا إطارًا لإدارة الاتصال الآمن عبر شبكة VPN من خلال
خادم موثوق به والحفاظ على مستوى أدائه. ستُعيد خدمة شبكة VPN الاتصال تلقائيًا عبر تحديثات التطبيقات، بغض النظر عما إذا كان الاتصال عبر شبكة Wi-Fi أو شبكة خلوية. وفي حال إعادة تشغيل الجهاز، سيُعيد إطار العمل الاتصال بشبكة VPN.
يكون الاتصال بخدمة VPN شفافًا للمستخدم. بالنسبة إلى الجهاز المملوك للشركة، لا يُطلب من المستخدم تأكيد مربّع إفادة الموافقة على استخدام شبكة VPN في وضع التشغيل الدائم. تسمح إعدادات الشبكة الافتراضية الخاصة للمستخدم ��تفعيل الاتصال الدائم دائمًا يدويًا.
وإذا كانت قيمة DISALLOW_CONFIG_VPN
هي true
، سيتم منع المستخدم من ضبط شبكة VPN. تفعيل
DISALLOW_DEBUGGING_FEATURES
لمنع المستخدمين من تجاوز الشبكة الافتراضية الخاصة (VPN) التي يتم تشغيلها دائمًا باستخدام الأمر adb debug.
لمنع أحد المستخدمين من إلغاء تثبيت شبكة VPN، يمكنك الاتصال بالرقم
DevicePolicyManager.setUninstallBlocked
.
إعداد خدمة VPN
أعدّت المؤسسة التي تستخدم حل المؤسسة لنظام Android شبكة VPN.
- تثبيت تطبيق شبكة افتراضية خاصة ينفّذ
VpnService
. يمكنك العثور على خدمات شبكة VPN النشطة باستخدام فلتر أهداف يتطابق مع الإجراءVpnService.SERVICE_INTERFACE
. - يُرجى توضيح ما يلي:
VpnService
في ملف بيان التطبيق الذي يحميه الإذنBIND_VPN_SERVICE
. - اضبط
VpnService
ليبدأ النظام. تجنَّب إعداد تطبيق شبكة VPN ليبدأ تلقائيًا من خلال الاستماع إلى تشغيل النظام والتحكم في دورة حياته. - اضبط عمليات الضبط المُدارة لتطبيق شبكة VPN (انظر المثال أدناه).
تفعيل اتصال شبكة VPN قيد التشغيل دائمًا
يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضبط اتصال شبكة VPN قيد التشغيل دائمًا من خلال تطبيق معيّن من خلال الاتصال بـ DevicePolicyManager.setAlwaysOnVpnPackage()
.
ويتم منح هذا الاتصال تلقائيًا ويستمر بعد إعادة التشغيل. إذا كانت قيمة lockdownEnabled
غير صحيحة، قد تكون حركة بيانات الشبكة غير آمنة عند إعادة تشغيل الهاتف والاتصال بشبكة VPN. يكون هذا مفيدًا إذا كنت لا تريد إيقاف الاتصال بالشبكة عند تعطُّل الشبكة الافتراضية الخاصة، أو إذا لم تكن الشبكة الافتراضية الخاصة ضرورية.
التحقق من اتصال شبكة VPN قيد التشغيل دائمًا
يمكن لوحدة التحكّم بسياسة الجهاز قراءة اسم الحزمة التي تدير اتصال شبكة VPN قيد التشغيل دائمًا للمستخدم الحالي باستخدام
DevicePolicyManager.getAlwaysOnVpnPackage().
إذا لم تتوفّر هذه الحزمة أو تم إنشاء شبكة VPN ضمن تطبيق "الإعدادات"
الخاصة بالنظام، يتم عرض null
.
مثال
في تطبيق TestDPC، يستخدم AlwaysOnVpnFragment.java
واجهات ��رمجة التطبيقات هذه لتفعيل إعداد اتصال شبكة VPN قيد التشغيل دائمًا.
في المثال التالي:
- يتم ضبط عمليات الضبط المُدارة لخدمة
شبكة VPN من خلال
DevicePolicyManager
باستخدام طريقةsetApplicationRestrictions()
الخاصة بها. - تستخدم عمليات الضبط المُدارة أزواجًا عشوائية من المفاتيح/القيمة، ويستخدمها هذا المثال في مكان آخر لضبط إعدادات شبكة VPN (راجِع التحقّق من عمليات الضبط المُدارة).
- يضيف هذا المثال أداة تثبيت حزمة Android إلى قائمة الحظر، بحيث لا يقوم بتحديث حزم النظام عبر شبكة VPN. تنتقل جميع حركة بيانات الشبكة للمستخدم ضمن الملف الشخصي للعمل أو الجهاز عبر تطبيق شبكة VPN هذا، باستثناء أداة تثبيت الحزمة، حيث تستخدم تحديثاته شبكة الإنترنت المفتوحة.
- بعد ذلك، يفعّل
DevicePolicyManager
الاتصال عبر شبكة VPN لحزمة الشبكة الافتراضية الخاصة باستخدامsetAlwaysOnVpnPackage()
، مع تفعيل "وضع الإغلاق".
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(...); }
إعداد معرّف شبكة لاسلكية واحد في جميع المناطق
يمكن لوحدة التحكّم بسياسة الجهاز (DPC) أن تربط عدة شهادات مرجع تصديق (CA) بإعدادات شبكة لاسلكية واحدة، وذلك إما في وضع مالك الجهاز أو وضع مالك الملف الشخصي. من خلال هذه الإعدادات، يمكن توصيل جهاز بنقاط و��ول لاسلكية لها اسم الشبكة نفسه أو معرّف مجموعة الخدمات (SSID)، لكن يتم ضبطها بشهادات CA مختلفة. ويكون ذلك مفيدًا إذا كانت الشبكات اللاسلكية لمؤسستك موجودة في مناطق جغرافية متعددة، وتتطلب كل منطقة مرجع تصديق مختلفًا. على سبيل المثال، قد تتطلب التوقيعات القانونية هيئة محلية تحتاج إلى مرجع تصديق إقليمي.
ملاحظة: لقد حصل Android على دعم
setCaCertificate
منذ واجهة برمجة التطبيقات 18 (Jelly Bean)، لكن على مشرفي تكنولوجيا المعلومات تزويد شبكاتهم
بشكل منفصل مع كل مرجع تصديق لضمان حصول الأجهزة على مصادقة سلسة عند كل نقطة وصول، بغض النظر عن منطقتها.
تحديد شهادات CA لتحديد الخادم
لتحديد قائمة بشهادات X.509 التي تحدّد الخادم الذي يستخدم معرّف SSID نفسه، عليك تضمين جميع مراجع التصديق ذات الصلة في الإعدادات اللاسلكية باستخدام WifiEnterpriseConfig.setCaCertificates()
.
تكون شهادة الخادم صالحة إذا كان مرجع التصديق (CA) التابع له يطابق إحدى الشهادات المحددة.
يتم تخصيص الأسماء التلقائية للشهادات تلقائيًا واستخدامها في
عملية الإعداد. يثبّت WifiManager
الشهادة ويحفظ الإعدادات تلقائيًا عند تفعيل الشبكة، ويزيل الشهادة عند حذف الإعداد.
للحصول على جميع شهادات CA المرتبطة بالإعداد اللاسلكي، استخدِم WifiEnterpriseConfig.getCaCertificates()
لعرض قائمة بكائنات X509Certificate
.
إضافة إعداد لاسلكي باستخدام شهادات CA متعدّدة
- التحقّق من هوية الخادم:
- حمِّل شهادات X.509 CA.
- حمِّل المفتاح الخاص والشهادة للعميل. راجع الأمان باستخدام HTTPS وطبقة المقابس الآمنة للحصول على مثال حول كيفية قراءة ملف شهادة.
- يمكنك إنشاء
WifiConfiguration
جديد وضبط معرّف SSID وإدارة المفاتيح. - يمكنك إعداد
المثيل
WifiEnterpriseConfig
على جهازWifiConfiguration
هذا.- حدِّد الخادم من خلال قائمة تضم عناصر
X509Certificate
باستخدامsetCaCertificates()
. - ��ضبط بيانات اعتماد العميل وهويته وكلمة المرور له.
- اضبط بروتوكول المصادقة القابلة للامتداد (EAP) وطريقة المرحلة الثانية كجزء من إنشاء الاتصال.
- حدِّد الخادم من خلال قائمة تضم عناصر
- أضِف الشبكة باستخدام
WifiManager
. - فعِّل الشبكة. يحفظ WifiManager الإعداد تلقائيًا أثناء الإعداد.
يربط هذا المثال الخطوات معًا:
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); }
تحديد برنامج اتصال منفصل للملف الشخصي للعمل
يمكنك إضافة تطبيق برنامج اتصال منفصل إلى القائمة المسموح بها لاستخدامه في الملف الشخصي للعمل.
قد يكون هذا هو برنامج الاتصال نفسه أو تطبيق Voice عبر IP (VoIP) الذي ينفّذ
ConnectionService
واجهة برمجة التطبيقات للواجهة الخلفية للاتصال. يوفر ذلك نفس تجربة الاتصال عبر واجهة مستخدم النظام المتكاملة
لتطبيقات بروتوكول الصوت على الإنترنت في الملف الشخصي للعمل، ما يجعل من برنامج اتصال العمل
ميزة أساسية بشكل فعّال. يتم تمييز المكالمات الواردة إلى حسابات مكالمات العمل
عن المكالمات الواردة إلى حسابات الاتصال الشخصية.
يمكن للمستخدم اختيار إجراء المكالمات وتلقّيها من برنامج اتصال العمل المدرَجة في القائمة المسموح بها
على حساب الهاتف. ويتم تسجيل جميع المكالمات التي يتم إجراؤها من برنامج الاتصال هذا أو الواردة إلى حساب هاتف العمل في مقدّم خدمة
CallLog
الملف الشخصي للعمل. يحتفظ برنامج الاتصال بالعمل بسجل مكالمات للعمل فقط مع إمكانية الوصول فقط إلى جهات اتصال العمل. يعال�� برنامج الاتصال الأساسي مكالمات مبدل الدائرة الواردة ويتم تخزينها في سجل المكالمات الشخصي. إذا تم حذف ملف شخصي للعمل، سيتم أيضًا حذف سجلّ المكالمات
المرتبط بهذا الملف الشخصي للعمل، بالإضافة إلى جميع بيانات الملف
الشخصي للعمل.
يجب على التطبيقات التابعة لجهات خارجية تنفيذ ConnectionService
أمّا تطبيقات VoIP التابعة لجهات خارجية والتي تحتاج إلى إجراء مكالمات هاتفية وتم دمجها في تطبيق الهاتف المدمج، فيمكنها تنفيذ
ConnectionService
واجهة برمجة التطبيقات. وهذا الإجراء مطلوب لأي خدمة من خدمات بروتوكول الصوت على الإنترنت المستخدمة في مكالمات العمل. تستفيد هذه التطبيقات من خلال التعامل مع مكالماتها مثل المكالمات الخلوية التقليدية، فعلى سبيل المثال، تظهر في برنامج الاتصال المدمج بالنظام وسجل المكالمات. في حال تثبيت تطبيق
ConnectionService
في الملف الشخصي للعمل، لا يمكن الوصول إليه إلا من خلال برنامج اتصال مثبَّت أيضًا في الملف الشخصي للعمل هذا.
بعد أن ينفّذ المطوّر
ConnectionService
،
عليه إضافته إلى ملف بيان التطبيق وتسجيل
PhoneAccount
في
TelecomManager
.
يمثّل حساب الهاتف طريقة مختلفة لإجراء المكالمات الهاتفية أو تلقّيها،
ويمكن أن يكون هناك عدة PhoneAccounts
لكل
ConnectionService
. بعد تسجيل حساب الهاتف، يمكن للمستخدم
تمكينه من خلال إعدادات برنامج الاتصال.
دمج واجهة مستخدم النظام والإشعارات
توفّر واجهة مستخدم النظام للمستخدمين تجربة اتصال متسقة ومتكاملة
للتطبيقات التابعة للجهات الخارجية التي تستخدم
ConnectionService
واجهة برمجة التطبيقات كخلفية لإجراء المكالمات. عند استخدام التطبيق في ملف شخصي للعمل، يظهر رمز حقيبة أوراق في المكالمات الواردة وفي شريط الحالة. يمكن لأي تطبيق ينفِّذ
ConnectionService
مُثبَّت في الملف الشخصي للعمل استخدام
برنامج اتصال النظام أو إنشاء برنامج اتصال منفصل للعمل. يمكن أن تكون تطبيقًا واحدًا أو
تطبيقات منفصلة.
يحدد تطبيق برنامج الاتصال ما إذا كان يجري أو يستقبل مكالمة عمل من خلال
البحث عن العلامة
android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL
.
إذا كانت المكالمة هي مكالمة عمل، فسيشير برنامج الاتصال إلى ذلك للمستخدم عن طريق إضافة
شارة عمل (رمز حقيبة الأوراق):
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 }