الاتصال الهاتفي والاتصال الهاتفي

تصف الميزات الواردة في هذا الدليل الشبكات وإدارة الاتصال الهاتفي. الإمكانات التي يمكنك تنفيذها في سياسة الجهاز (DPC). يحتوي هذا المستند على رمز برمجي. باستخدام العيّنات ويمكنك أيضًا استخدام صفحة اختبار تطبيق DPC مصدر رمز نموذجي لميزات المؤسسة في Android.

يمكن تشغيل تطبيق وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي على الأجهزة الشخصية أو في مالك الجهاز. على الأجهزة المُدارة بالكامل. ويشير هذا الجدول إلى الميزات متاحة عند تشغيل وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي أو مالك الجهاز الوضع:

الميزة مالك الملف الشخصي مالك الجهاز
الوصول إلى جهات اتصال العمل في جميع الملفات التجارية
تأكد من اتصال شبكة آمن لحركة بيانات العمل
إعداد رقم تعريف واحد لشبكة لاسلكية في جميع المناطق
تحديد برنامج اتصال منفصل لملف العمل

الوصول إلى جهات اتصال العمل من خلال الملفات الشخصية

يمكن لإدارة الخدمات الجوّالة للمؤسسات (EMM) السماح للملف الشخصي للمستخدم بالوصول إلى جهات اتصال العمل حتى الوصول إلى جهات الاتصال الشخصية وجهات العمل للمستخدم من خلال البحث المحلي البحث عن الدليل البعيد. على الأجهزة الشخصية، هناك برنامج اتصال واحد في الشخصي إجراء المكالمات الشخصية واستقبالها بالإضافة إلى مكالمات العمل. بالإضافة إلى ذلك، يتم دمج جهات اتصال العمل بشكل جيد في واجهة مستخدم النظام. إذا كان ملف العمل مشفرة، فلن تكون بياناته متاحة للملف الشخصي.

مدمجة مع واجهة مستخدم النظام

تشير واجهة مستخدم النظام إلى مكالمات العمل الواردة باستخدام رمز حقيبة الأوراق. تشير رسالة الأشكال البيانية تعرض callLog أيضًا لتحديد مكالمات العمل الواردة والصادرة. يحتوي برنامج الاتصال الشخصي يمكن لتطبيقات جهات الاتصال عرض معلومات رقم المتّصل لجهة اتصال العمل باستخدام جهاز تحكّم عن بُعد. البحث في الدليل، إذًا فليس من الضروري أن تكون جهة الاتصال متزامنة على جهاز محلي. يمكن لتطبيق المراسلة إجراء بحث محلي وإظهار رقم المتّصل.

تعريف التوافق مع Android يتضمّن المستند (CDD) المتطلّبات. لعرض جهات اتصال العمل في برنامج الاتصال التلقائي، والمتطلبات التي إضافة شارة إلى تطبيقات المراسلة وجهات الاتصال للإشارة إلى أنّهم من مكان العمل بك.

جهات اتصال العمل يمكن الوصول إليها والبحث فيها

يمكن للمستخدم الوصول إلى جهات اتصال العمل والاتصال بها من ملفه الشخصي، والذي في شاشة البحث في تطبيق برنامج الاتصال. يمكن للمستخدم البحث عن العمل جهات الاتصال — التي تستخدم الإكمال التلقائي — التي تتم مزامنتها محليًا مع الجهاز وإدراجها من خلال البحث عن دليل بعيد.

التحكُّم في جهات اتصال العمل في الملف الشخصي الأساسي

وتتحكّم وحدة التحكّم بسياسة الجهاز في إذن البحث في جهات اتصال العمل. جارٍ التنفيذ في مالك الملف الشخصي Google Workspace، تدير وحدة التحكّم بسياسة الجهاز إذن الوصول إلى جهات اتصال العمل في الملف الشخصي. لمزيد من المعلومات، راجع إنشاء سياسة جهاز فقط.

تكون ميزة البحث في جهات اتصال العمل باستخدام الملف الشخصي مفعَّلة تلقائيًا.

التأكّد من اتصال شبكة آمن لحركة بيانات العمل

التشغيل في وضع مالك الجهاز أو وضع مالك الملف الشخصي، وهي إحدى سياسات الجهاز وحدة تحكم واحدة استخدام اتصال شبكة افتراضية خاصة (VPN) قيد التشغيل دائمًا إجبار التطبيقات على تمرير حركة البيانات من خلال تطبيق شبكة VPN محدد لا يمكن التي تم تجاوزها. وباستخدام اتصال شبكة ظاهرية خاصة (VPN) يعمل دائمًا، يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضمان أن الشبكة حركة البيانات من ملف شخصي للعمل أو جهاز مُدار عبر خدمة شبكة ظاهرية خاصة (VPN) بدون تدخل المستخدم. تؤدي هذه العملية إلى إنشاء اتصال شبكة آمن حركة مرور مستمرة داخل ملف العمل.

لمحة عن اتصالات شبكة VPN التي تكون قيد التشغيل دائمًا

تتم إدارة توجيه الشبكة الافتراضية الخاصة (VPN) تلقائيًا كجزء من إطار عمل النظام، بحيث لا يمكن للمستخدم تجاوز خدمة VPN. في حال قطع اتصال خدمة شبكة VPN أثناء التشغيل وضع التأمين، لا يمكن أن تسرّب حركة المرور إلى الإنترنت المفتوح. للتطبيقات جارٍ التنفيذ VpnService, توفر شبكة VPN قيد التشغيل دائمًا إطارًا عمليًا لإدارة اتصال آمن عبر شبكة VPN من خلال خادم موثوق به والاحتفاظ به. تعيد خدمة شبكة VPN تشغيل الاتصال عبر تحديثات التطبيق، بغض النظر عما إذا كان الاتصال عبر Wi-Fi أو شبكة الجوّال. وإذا تمت إعادة تشغيل الجهاز، سيعيد إطار العمل اتصال شبكة VPN.

يكون الاتصال بخدمة VPN للمستخدم شفافًا. بالنسبة إلى جهاز مملوك للشركة، لا يُطلب من المستخدم تأكيد مربّع إفادة الموافقة شبكة VPN في وضع التشغيل الدائم. تسمح إعدادات الشبكة الافتراضية الخاصة للمستخدم بتفعيل اتصال دائم يدويًا.

إذا DISALLOW_CONFIG_VPN هو true، سيتم منع المستخدم من ضبط شبكة VPN. تفعيل DISALLOW_DEBUGGING_FEATURES لمنع المستخدمين من تجاوز شبكة VPN قيد التشغيل دائمًا باستخدام أمر تصحيح أخطاء adb. لمنع مستخدم من إلغاء تثبيت شبكة VPN، يُرجى الاتصال DevicePolicyManager.setUninstallBlocked

إعداد خدمة شبكة VPN

يتم إعداد شبكة VPN على المؤسسة التي تستخدم حل المؤسسة لنظام Android.

  1. تثبيت تطبيق شبكة VPN يتيح VpnService يمكنك العثور على خدمات VPN النشطة باستخدام فلتر أهداف يطابق الإجراء VpnService.SERVICE_INTERFACE
  2. بيان VpnService في بيان التطبيق المحمي بالإذن BIND_VPN_SERVICE
  3. ضبط VpnService حتى يتم بدؤه بواسطة النظام. تجنَّب ضبط تطبيق شبكة VPN ليبدأ من تلقاء نفسه والاستماع إلى تشغيل النظام والتحكم في دورة حياته الخاصة.
  4. تعيين إعدادات الحساب المُدار من الإعدادات تطبيق شبكة VPN (راجِع المثال أدناه).

تفعيل اتصال شبكة VPN الذي يكون قيد التشغيل دائمًا

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضبط اتصال شبكة VPN قيد التشغيل دائمًا من خلال تطبيق معيّن عن طريق يتصل DevicePolicyManager.setAlwaysOnVpnPackage()

يتم منح هذا الاتصال تلقائيًا واستمراره بعد إعادة التشغيل. في حال حذف lockdownEnabled خطأ، قد تكون حركة بيانات الشبكة غير آمنة منذ وقت إجراء إعادة تشغيل للهاتف واتصال شبكة VPN. هذا مفيد إذا كنت لا تريد التوقف الاتصال بالشبكة عند تعطُّل شبكة VPN أو إذا لم تكن شبكة VPN ضرورية.

التحقُّق من اتصال شبكة VPN الذي يكون قيد التشغيل دائمًا

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) قراءة اسم الحزمة التي تدير شبكة 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)، ولكن تم إعداده باستخدام مرجع تصديق مختلف الشهادات. ويكون هذا الأمر مفيدًا إذا كانت الشبكات اللاسلكية في مؤسستك تقع في عدة مناطق جغرافية، وتتطلب كل منطقة هيئة إصدار الشهادات. على سبيل المثال، يمكن أن تتطلب التوقيعات القانونية جهة محلية هيئة إصدار شهادات إقليمية.

ملاحظة: نظام Android متوافق setCaCertificate بدءًا من واجهة برمجة التطبيقات 18 (Jelly Bean)، ولكن على مشرفي تكنولوجيا المعلومات توفير المتطلبات اللازمة لشبكاتهم بشكل منفصل مع كل مرجع تصديق لضمان إجراء مصادقة سلسة للأجهزة في كل نقطة وصول مختلفة، بغض النظر عن المنطقة.

تحديد شهادات CA لتحديد الخادم

لتحديد قائمة بشهادات X.509 التي تحدد الخادم الذي يستخدم نفس SSID، تضمين جميع مراجع التصديق ذات الصلة في الإعداد اللاسلكي باستخدام WifiEnterpriseConfig.setCaCertificates().

تكون شهادة الخادم صالحة إذا كان مرجع تصديقه يطابِق إحدى الشهادات المحدّدة. يتم تخصيص الأسماء التلقائية للشهادات تلقائيًا ويتم استخدامها داخل التكوين. تشير رسالة الأشكال البيانية WifiManager تثبّت الشهادة وتحفظ الإعداد تلقائيًا عند تمكين الشبكة، وإزالة الشهادة عندما تكون التهيئة حذف.

للحصول على جميع شهادات CA المرتبطة بالتهيئة اللاسلكية، استخدم WifiEnterpriseConfig.getCaCertificates() لعرض قائمة X509Certificate عناصر

إضافة ضبط لاسلكي باستخدام شهادات CA متعددة

  1. تحقَّق من هوية الخادم:
    1. حمِّل شهادات مرجع تصديق X.509.
    2. حمِّل المفتاح الخاص للعميل والشهادة. راجِع الأمان باستخدام HTTPS وطبقة المقابس الآمنة للاطّلاع على مثال حول كيفية قراءة ملف الشهادة.
  2. إنشاء حساب جديد WifiConfiguration وضبط SSID وإدارة المفتاح.
  3. إعداد WifiEnterpriseConfig في WifiConfiguration.
    1. تحديد الخادم من خلال قائمة X509Certificate من الكائنات باستخدام setCaCertificates()
    2. اضبط بيانات اعتماد العميل والهوية وكلمة المرور.
    3. تعيين بروتوكول المصادقة الموسعة (EAP) وطريقة المرحلة الثانية على جزءًا من إنشاء الاتصال.
  4. أضف الشبكة باستخدام WifiManager
  5. فعِّل الشبكة. يحفظ 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);
}

تحديد برنامج اتصال منفصل لملف العمل

يمكنك إضافة تطبيق برنامج اتصال منفصل إلى القائمة المسموح بها لاستخدامه في ملف العمل. وقد يكون هذا هو برنامج الاتصال نفسه أو تطبيق الصوت على بروتوكول الإنترنت (VoIP) الذي ينفّذ ConnectionService واجهة برمجة التطبيقات لخلفية الاتصال يؤدي هذا إلى توفير الاتصال لواجهة مستخدم النظام المتكامل نفسه خبرة إلى تطبيقات VoIP في ملف العمل، مما يجعل العمل برنامج الاتصال ميزة أساسية. يتم إجراء المكالمات الواردة إلى حسابات مكالمات العمل من المكالمات الواردة إلى حسابات الاتصال الشخصية.

يمكن للمستخدم اختيار إجراء المكالمات وتلقّيها من برنامج اتصال العمل المُدرَجة في القائمة المسموح بها. على حساب الهاتف. كل المكالمات التي يتم إجراؤها من برنامج الاتصال هذا أو الواردة إلى مكان العمل حساب الهاتف، يتم تسجيلها في ملف العمل CallLog المستخدم. يحتفظ برنامج اتصال العمل بسجل مكالمات للعمل فقط مع إمكانية الوصول فقط إلى جهات اتصال العمل. يتعامل برنامج الاتصال الأساسي مع المكالمات الواردة بمفاتيح تبديل دائرة كهربائية وتخزينها في سجل مكالمات شخصي. في حال حذف ملف شخصي للعمل، سيتم إدخال سجلّ المكالمات المرتبط بملف العمل هذا أيضًا، وكذلك جميع ملفات العمل البيانات.

يجب أن تستخدم التطبيقات التابعة لجهات خارجية ConnectionService.

تطبيقات تابعة لجهات خارجية تحتاج إلى إجراء مكالمات هاتفية وإجراء تلك المكالمات في تطبيق الهاتف المدمج تنفيذ ConnectionService واجهة برمجة التطبيقات. وهذا الإجراء مطلوب لأي خدمة بروتوكول الصوت على الإنترنت (VoIP) المستخدَمة لمكالمات العمل. هذه التطبيقات من خلال التعامل مع مكالماتهم مثل الاتصالات الخلوية التقليدية، على سبيل المثال، تظهر في برنامج الاتصال بالنظام المدمج وسجل المكالمات. إذا كانت تنفيذ التطبيق 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
}