شبکه و تلفن

ویژگی‌های این راهنما، قابلیت‌های مدیریت شبکه و تلفن را که می‌توانید در برنامه کنترل‌کننده خط‌مشی دستگاه (DPC) خود پیاده‌سازی کنید، توصیف می‌کند. این سند حاوی نمونه کد است و همچنین می توانید از برنامه Test DPC به عنوان منبع کد نمونه برای ویژگی های سازمانی اندروید استفاده کنید.

یک برنامه DPC می تواند در حالت مالک نمایه در دستگاه های شخصی یا در حالت مالک دستگاه در دستگاه های کاملاً مدیریت شده اجرا شود. این جدول نشان می‌دهد که وقتی DPC در حالت مالک نمایه یا حالت مالک دستگاه اجرا می‌شود، کدام ویژگی‌ها در دسترس هستند:

ویژگی مالک نمایه صاحب دستگاه
به مخاطبین کاری در نمایه ها دسترسی داشته باشید
از اتصال شبکه ایمن برای ترافیک کاری اطمینان حاصل کنید
یک شناسه شبکه بی سیم واحد را در سراسر مناطق تنظیم کنید
یک شماره گیر جداگانه برای پروفایل کاری تعیین کنید

به مخاطبین کاری در نمایه ها دسترسی داشته باشید

EMM ها می توانند به نمایه شخصی کاربر اجازه دسترسی به مخاطبین کاری او را بدهند تا مخاطبین شخصی و کاری کاربر از طریق جستجوی محلی و جستجوی دایرکتوری از راه دور قابل دسترسی باشند. در دستگاه‌های شخصی، یک شماره‌گیر در نمایه شخصی می‌تواند تماس‌های شخصی و همچنین تماس‌های کاری را برقرار و دریافت کند. علاوه بر این، مخاطبین کاری به خوبی در رابط کاربری سیستم یکپارچه شده اند. اگر نمایه کاری رمزگذاری شده باشد، داده‌های آن برای نمایه شخصی در دسترس نیست.

با رابط کاربری سیستم یکپارچه شده است

رابط کاربری سیستم تماس‌های کاری ورودی را با استفاده از نماد کیف پول نشان می‌دهد. callLog همچنین نمادی را برای تعیین تماس های کاری ورودی و خروجی نشان می دهد. شماره‌گیر شخصی و برنامه‌های مخاطب می‌توانند اطلاعات شناسه تماس‌گیرنده یک مخاطب کاری را با استفاده از جستجوی فهرست راه دور نمایش دهند، بنابراین لازم نیست که مخاطب قبلاً در دستگاه محلی همگام‌سازی شده باشد. برنامه پیام رسانی می تواند شناسه تماس گیرنده محلی و جستجو را انجام دهد.

سند تعریف سازگاری Android (CDD) شامل الزاماتی برای نمایش مخاطبین کاری در شماره‌گیر پیش‌فرض، و الزاماتی است که مخاطبین و برنامه‌های پیام‌رسان دارای نشان هستند تا نشان دهند که از نمایه کاری هستند.

مخاطبین کاری قابل دسترسی و جستجو هستند

کاربر می تواند از نمایه شخصی خود که در صفحه جستجوی برنامه شماره گیر نمایش داده می شود، به مخاطبین کاری دسترسی داشته باشد و با آنها تماس بگیرد. کاربر می‌تواند مخاطبین کاری را - با استفاده از تکمیل خودکار - که به صورت محلی با دستگاه همگام‌سازی شده‌اند و از طریق جستجوی فهرست راه دور فهرست شده‌اند، جستجو کند.

مخاطبین کاری را در نمایه اصلی کنترل کنید

DPC مجوز جستجوی مخاطبین کاری را کنترل می کند. DPC که در حالت مالک نمایه اجرا می شود، نمایان بودن مخاطبین کاری را در نمایه شخصی مدیریت می کند. برای اطلاعات بیشتر، به ساخت کنترلر خط مشی دستگاه مراجعه کنید.

جستجوی مخاطبین کاری با نمایه شخصی به طور پیش فرض فعال است.

از اتصال شبکه ایمن برای ترافیک کاری اطمینان حاصل کنید

کنترل‌کننده خط‌مشی دستگاه که در حالت مالک دستگاه یا حالت مالک نمایه اجرا می‌شود، می‌تواند از اتصال شبکه خصوصی مجازی (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 را راه اندازی می کند.

  1. یک برنامه VPN را نصب کنید که VpnService را پیاده سازی می کند. می‌توانید با استفاده از فیلتر هدف که با عملکرد VpnService.SERVICE_INTERFACE مطابقت دارد، خدمات VPN فعال را پیدا کنید.
  2. یک VpnService در مانیفست برنامه اعلام کنید که توسط مجوز BIND_VPN_SERVICE محافظت می شود.
  3. VpnService را پیکربندی کنید تا توسط سیستم راه اندازی شود. از تنظیم برنامه VPN برای شروع خود با گوش دادن به بوت سیستم و کنترل چرخه عمر خود خودداری کنید.
  4. تنظیمات مدیریت شده را برای برنامه 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 یک پیکربندی بی سیم اضافه کنید

  1. تایید هویت سرور:
    1. گواهینامه های X.509 CA را بارگیری کنید.
    2. کلید خصوصی و گواهی مشتری را بارگیری کنید. برای مثالی از نحوه خواندن فایل گواهی ، امنیت با HTTPS و SSL را ببینید.
  2. یک WifiConfiguration جدید ایجاد کنید و SSID و مدیریت کلید آن را تنظیم کنید.
  3. نمونه WifiEnterpriseConfig را در این WifiConfiguration تنظیم کنید.
    1. سرور را با لیستی از اشیاء X509Certificate با استفاده از setCaCertificates() شناسایی کنید.
    2. اعتبار مشتری، هویت و رمز عبور را تنظیم کنید.
    3. پروتکل تأیید اعتبار توسعه پذیر (EAP) و روش فاز 2 را به عنوان بخشی از برقراری اتصال تنظیم کنید.
  4. شبکه را با WifiManager اضافه کنید.
  5. شبکه را فعال کنید 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
}