جهات الاتصال للملف الشخصي للعمل

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

نظرة عامة

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

غالبًا ما يرغب المستخدمون في استخدام أجهزتهم وتطبيقاتهم الشخصية في العمل. باستخدام جهات اتصال الملف الشخصي للعمل، يمكن أن يصبح تطبيقك جزءًا من يوم عمل المستخدم.

تجربة المستخدم

يجب الأخذ بعين الاعتبار الطريقة التي يمكن أن يعرض بها تطبيقك معلومات الاتصال من الملف الشخصي للعمل. تعتمد أفضل طريقة ممكنة على طبيعة تطبيقك وسبب استخدامه من قِبل الأشخاص، ولكن عليك مراعاة ما يلي:

  • هل يجب أن يتضمن تطبيقك جهات الاتصال في الملف الشخصي للعمل بشكل افتراضي أم يجب على المستخدم الموافقة عليها؟
  • كيف سيؤثر خلط أو فصل جهات اتصال الملف الشخصي للعمل والملف الشخصي على تدفق المستخدم؟
  • ما هو تأثير النقر بغير قصد على جهة اتصال في الملف الشخصي للعمل؟
  • ماذا يحدث لواجهة تطبيقك عند عدم توفُّر جهات اتصال الملف الشخصي للعمل؟

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

لقطة شاشة تعرض نتائج البحث في قائمة
الشكل 1. كيف يفصل تطبيق "جهات اتصال Google" جهات اتصال الملف الشخصي للعمل؟

على سبيل المثال، يقوم تطبيق "جهات اتصال Google" (الموضح في الشكل 1) بما يلي لإدراج مزيج من جهات الاتصال في الملف الشخصي للعمل والملف الشخصي:

  1. يدرج عنوانًا فرعيًا لفصل أقسام العمل عن الأقسام الشخصية في القائمة.
  2. الشارات تعمل على جهات الاتصال مع رمز حقيبة أوراق.
  3. فتح جهة اتصال عمل في الملف الشخصي للعمل عند النقر عليها

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

الأذونات

إذا كان تطبيقك يعمل مع جهات اتصال المستخدم، ستحصل على إذن READ_CONTACTS (أو ربما WRITE_CONTACTS) الذي طلبته في ملف بيان التطبيق. ولأن الشخص نفسه يستخدم الملف الشخصي والملف الشخصي للعمل، لن تحتاج إلى إذن إضافي للوصول إلى بيانات الاتصال من الملف الشخصي للعمل.

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

عمليات البحث في جهات الاتصال

يمكنك الحصول على جهات الاتصال من الملف الشخصي للعمل باستخدام واجهات برمجة التطبيقات والعمليات نفسها التي يستخدمها تطبيقك للحصول على جهات الاتصال في الملف الشخصي. ويكون معرّف الموارد المنتظم (URI) للمؤسسة لجهات الاتصال متوافقًا مع الإصدار Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. يجب إجراء التعديلات التالية على عنوان URL:

  1. اضبط معرّف الموارد المنتظم (URI) لموفّر المحتوى على Contacts.ENTERPRISE_CONTENT_FILTER_URI، وقدِّم اسم جهة الاتصال كسلسلة طلب بحث.
  2. ضبط دليل جهات اتصال للبحث على سبيل المثال، يعثر ENTERPRISE_DEFAULT على جهات الاتصال في المتجر المحلي للملف الشخصي للعمل.

يعمل تغيير معرّف الموارد المنتظم (URI) مع أي آلية لتوفير محتوى، مثل CursorLoader، وهي طريقة مثالية لتحميل بيانات جهات الاتصال في واجهات المستخدم لأنّ الوصول إلى البيانات يتم في سلسلة محادثات عاملة. للتبسيط، تُسمى الأمثلة في هذا الدليل ContentResolver.query(). إليك كيفية العثور على جهات الاتصال في دليل جهات الاتصال المحلي للملف الشخصي للعمل:

Kotlin

// First confirm the device user has given permission for the personal profile.
// There isn't a separate work permission, but an IT admin can block access.
val readContactsPermission =
  ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.READ_CONTACTS)
if (readContactsPermission != PackageManager.PERMISSION_GRANTED) {
  return
}

// Fetch Jackie, James, & Jason (and anyone else whose names begin with "ja").
val nameQuery = Uri.encode("ja")

// Build the URI to look up work profile contacts whose name matches. Query
// the default work profile directory which is the locally-stored contacts.
val contentFilterUri =
  ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI
    .buildUpon()
    .appendPath(nameQuery)
    .appendQueryParameter(
      ContactsContract.DIRECTORY_PARAM_KEY,
      ContactsContract.Directory.ENTERPRISE_DEFAULT.toString()
    )
    .build()

// Query the content provider using the generated URI.
var cursor =
  getContentResolver()
    .query(
      contentFilterUri,
      arrayOf(
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.LOOKUP_KEY,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
      ),
      null,
      null,
      null
    )

// Print any results found using the work profile contacts' display name.
cursor?.use {
  while (it.moveToNext()) {
    Log.i(TAG, "Work profile contact: ${it.getString(2)}")
  }
}

Java

// First confirm the device user has given permission for the personal profile.
// There isn't a separate work permission, but an IT admin can block access.
int readContactsPermission = ContextCompat.checkSelfPermission(
    getBaseContext(), Manifest.permission.READ_CONTACTS);
if (readContactsPermission != PackageManager.PERMISSION_GRANTED) {
  return;
}

// Fetch Jackie, James, & Jason (and anyone else whose names begin with "ja").
String nameQuery = Uri.encode("ja");

// Build the URI to look up work profile contacts whose name matches. Query
// the default work profile directory which is the locally stored contacts.
Uri contentFilterUri = ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI
    .buildUpon()
    .appendPath(nameQuery)
    .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
        String.valueOf(ContactsContract.Directory.ENTERPRISE_DEFAULT))
    .build();

// Query the content provider using the generated URI.
Cursor cursor = getContentResolver().query(
    contentFilterUri,
    new String[] {
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.LOOKUP_KEY,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
    },
    null,
    null,
    null);
if (cursor == null) {
  return;
}

// Print any results found using the work profile contacts' display name.
try {
  while (cursor.moveToNext()) {
    Log.i(TAG, "Work profile contact: " + cursor.getString(2));
  }
} finally {
  cursor.close();
}

الأدلة

تستخدم العديد من المؤسسات الأدلة البعيدة، مثل Microsoft Exchange أو LDAP، التي تحتوي على معلومات جهات الاتصال للمؤسسة بأكملها. يمكن لتطبيقك مساعدة المستخدمين على التواصل والمشاركة مع زملاء العمل في دليل مؤسستهم. تجدر الإشارة إلى أنّ هذه الأدلة تحتوي عادةً على آلاف جهات الاتصال، ويحتاج تطبيقك أيضًا إلى اتصال نشط بالشبكة للبحث فيها. يمكنك استخدام موفّر محتوى Directory للحصول على الأدلة التي تستخدمها حسابات المستخدم ومعرفة المزيد من المعلومات عن دليل فردي.

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

بما أنّ Android يخزِّن معلومات الاتصال في أنواع مختلفة من الأدلة المحلية والأدلة عن بُعد، تقدّم الفئة Directory طُرقًا يمكنك الاتصال بها للاطّلاع على مزيد من المعلومات عن الدليل:

isEnterpriseDirectoryId()
يمكنك الاتصال بهذه الطريقة لمعرفة ما إذا كان الدليل من حساب ملف شخصي للعمل. تذكر أن موفر محتوى ENTERPRISE_CONTENT_URI يعرض أدلة جهات الاتصال للملف الشخصي والملف الشخصي للعمل معًا.
isRemoteDirectoryId()
يمكنك استدعاء هذه الطريقة لمعرفة ما إذا كان الدليل يعمل عن بُعد. قد تكون الأدلة البعيدة عبارة عن متاجر جهات اتصال للمؤسسات أو قد تكون شبكات اجتماعية للمستخدم.

يوضح المثال التالي كيف يمكنك استخدام هذه الطرق لفلترة أدلة الملف الشخصي للعمل:

Kotlin

// First, confirm the device user has given READ_CONTACTS permission.
// This permission is still needed for directory listings ...

// Query the content provider to get directories for BOTH the personal and
// work profiles.
val cursor =
  getContentResolver()
    .query(
      ContactsContract.Directory.ENTERPRISE_CONTENT_URI,
      arrayOf(ContactsContract.Directory._ID, ContactsContract.Directory.PACKAGE_NAME),
      null,
      null,
      null
    )

// Print the package name of the work profile's local or remote contact directories.
cursor?.use {
  while (it.moveToNext()) {
    val directoryId = it.getLong(0)
    if (ContactsContract.Directory.isEnterpriseDirectoryId(directoryId)) {
      Log.i(TAG, "Directory: ${it.getString(1)}")
    }
  }
}

Java

// First, confirm the device user has given READ_CONTACTS permission.
// This permission is still needed for directory listings ...

// Query the content provider to get directories for BOTH the personal and
// work profiles.
Cursor cursor = getContentResolver().query(
    ContactsContract.Directory.ENTERPRISE_CONTENT_URI,
    new String[]{
        ContactsContract.Directory._ID,
        ContactsContract.Directory.PACKAGE_NAME
    },
    null,
    null,
    null);
if (cursor == null) {
  return;
}

// Print the package name of the work profile's local or remote contact directories.
try {
  while (cursor.moveToNext()) {
    long directoryId = cursor.getLong(0);

    if (ContactsContract.Directory.isEnterpriseDirectoryId(directoryId)) {
      Log.i(TAG, "Directory: " + cursor.getString(1));
    }
  }
} finally {
  cursor.close();
}

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

عمليات بحث الهاتف

يمكن للتطبيقات إجراء طلب بحث عن PhoneLookup.CONTENT_FILTER_URI للبحث بفعالية عن بيانات الاتصال الخاصة برقم هاتف. يمكنك الحصول على نتائج البحث من مقدّم جهات الاتصال الشخصية ومزوّدة خدمة الملف الشخصي للعمل إذا استبدلت معرّف الموارد المنتظم هذا بـ PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI. يتوفّر معرّف الموارد المنتظم (URI) لمحتوى الملف الشخصي للعمل هذا في الإصدار Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث.

يعرض المثال التالي تطبيقًا يجري طلب بحث عن معرّف الموارد المنتظم (URI) لمحتوى الملف الشخصي للعمل من أجل ضبط واجهة المستخدم لمكالمة واردة:

Kotlin

fun onCreateIncomingConnection(
  connectionManagerPhoneAccount: PhoneAccountHandle,
  request: ConnectionRequest
): Connection {
  var request = request
  // Get the telephone number from the incoming request URI.
  val phoneNumber = this.extractTelephoneNumber(request.address)

  var displayName = "Unknown caller"
  var isCallerInWorkProfile = false

  // Look up contact details for the caller in the personal and work profiles.
  val lookupUri =
    Uri.withAppendedPath(
      ContactsContract.PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI,
      Uri.encode(phoneNumber)
    )
  val cursor =
    getContentResolver()
      .query(
        lookupUri,
        arrayOf(
          ContactsContract.PhoneLookup._ID,
          ContactsContract.PhoneLookup.DISPLAY_NAME,
          ContactsContract.PhoneLookup.CUSTOM_RINGTONE
        ),
        null,
        null,
        null
      )

  // Use the first contact found and check if they're from the work profile.
  cursor?.use {
    if (it.moveToFirst() == true) {
      displayName = it.getString(1)
      isCallerInWorkProfile = ContactsContract.Contacts.isEnterpriseContactId(it.getLong(0))
    }
  }

  // Return a configured connection object for the incoming call.
  val connection = MyAudioConnection()
  connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED)

  // Our app's activity uses this value to decide whether to show a work badge.
  connection.setIsCallerInWorkProfile(isCallerInWorkProfile)

  // Configure the connection further ...
  return connection
}

Java

public Connection onCreateIncomingConnection (
    PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
  // Get the telephone number from the incoming request URI.
  String phoneNumber = this.extractTelephoneNumber(request.getAddress());

  String displayName = "Unknown caller";
  boolean isCallerInWorkProfile = false;

  // Look up contact details for the caller in the personal and work profiles.
  Uri lookupUri = Uri.withAppendedPath(
      ContactsContract.PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI,
      Uri.encode(phoneNumber));
  Cursor cursor = getContentResolver().query(
      lookupUri,
      new String[]{
          ContactsContract.PhoneLookup._ID,
          ContactsContract.PhoneLookup.DISPLAY_NAME,
          ContactsContract.PhoneLookup.CUSTOM_RINGTONE
      },
      null,
      null,
      null);

  // Use the first contact found and check if they're from the work profile.
  if (cursor != null) {
    try {
      if (cursor.moveToFirst() == true) {
        displayName = cursor.getString(1);
        isCallerInWorkProfile =
            ContactsContract.Contacts.isEnterpriseContactId(cursor.getLong(0));
      }
    } finally {
      cursor.close();
    }
  }

  // Return a configured connection object for the incoming call.
  MyConnection connection = new MyConnection();
  connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED);

  // Our app's activity uses this value to decide whether to show a work badge.
  connection.setIsCallerInWorkProfile(isCallerInWorkProfile);

  // Configure the connection further ...
  return connection;
}

عمليات بحث البريد الإلكتروني

يمكن لتطبيقك الحصول على بيانات الاتصال الشخصية أو بيانات الاتصال الخاصة بالعمل لعنوان بريد إلكتروني من خلال إرسال طلب بحث إلى Email.ENTERPRISE_CONTENT_LOOKUP_URI. يؤدي طلب البحث عن عنوان URL هذا أولاً إلى البحث في جهات الاتصال الشخصية عن مطابقة تامة. إذا لم يتطابق مقدم الخدمة مع أي جهات اتصال شخصية، سيبحث مقدم الخدمة حينئذٍ في جهات اتصال العمل عن تطابق. يتوفّر معرّف الموارد المنتظم (URI) هذا في الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث.

إليك كيفية البحث عن معلومات الاتصال لعنوان بريد إلكتروني:

Kotlin

// Build the URI to look up contacts from the personal and work profiles that
// are an exact (case-insensitive) match for the email address.
val emailAddress = "somebody@example.com"
val contentFilterUri =
  Uri.withAppendedPath(
    ContactsContract.CommonDataKinds.Email.ENTERPRISE_CONTENT_LOOKUP_URI,
    Uri.encode(emailAddress)
  )

// Query the content provider to first try to match personal contacts and,
// if none are found, then try to match the work contacts.
val cursor =
  contentResolver.query(
    contentFilterUri,
    arrayOf(
      ContactsContract.CommonDataKinds.Email.CONTACT_ID,
      ContactsContract.CommonDataKinds.Email.ADDRESS,
      ContactsContract.Contacts.DISPLAY_NAME
    ),
    null,
    null,
    null
  )
    ?: return

// Print the name of the matching contact. If we want to work-badge contacts,
// we can call ContactsContract.Contacts.isEnterpriseContactId() with the ID.
cursor.use {
  while (it.moveToNext()) {
    Log.i(TAG, "Matching contact: ${it.getString(2)}")
  }
}

Java

// Build the URI to look up contacts from the personal and work profiles that
// are an exact (case-insensitive) match for the email address.
String emailAddress = "somebody@example.com";
Uri contentFilterUri = Uri.withAppendedPath(
    ContactsContract.CommonDataKinds.Email.ENTERPRISE_CONTENT_LOOKUP_URI,
    Uri.encode(emailAddress));

// Query the content provider to first try to match personal contacts and,
// if none are found, then try to match the work contacts.
Cursor cursor = getContentResolver().query(
    contentFilterUri,
    new String[]{
        ContactsContract.CommonDataKinds.Email.CONTACT_ID,
        ContactsContract.CommonDataKinds.Email.ADDRESS,
        ContactsContract.Contacts.DISPLAY_NAME
    },
    null,
    null,
    null);
if (cursor == null) {
  return;
}

// Print the name of the matching contact. If we want to work-badge contacts,
// we can call ContactsContract.Contacts.isEnterpriseContactId() with the ID.
try {
  while (cursor.moveToNext()) {
    Log.i(TAG, "Matching contact: " + cursor.getString(2));
  }
} finally {
  cursor.close();
}

عرض جهة اتصال العمل

يمكن للتطبيقات التي يتم تشغيلها في الملف الشخصي أن تعرض بطاقة جهة اتصال في الملف الشخصي للعمل. الاتصال برقم ContactsContract.QuickContact.showQuickContact() على الإصدار 5.0 من نظام التشغيل Android أو الإصدارات الأحدث لتشغيل تطبيق "جهات الاتصال" في الملف الشخصي للعمل وعرض بطاقة جهة الاتصال.

لإنشاء معرّف موارد منتظم (URI) صحيح للملف الشخصي للعمل، يجب طلب الرقم ContactsContract.Contacts.getLookupUri() وتمرير رقم تعريف جهة الاتصال ومفتاح البحث. يوضح المثال التالي كيفية الحصول على عنوان URI ثم يعرض البطاقة:

Kotlin

// Query the content provider using the ENTERPRISE_CONTENT_FILTER_URI address.
// We use the _ID and LOOKUP_KEY columns to generate a work-profile URI.
val cursor =
  getContentResolver()
    .query(
      contentFilterUri,
      arrayOf(ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY),
      null,
      null
    )

// Show the contact details card in the work profile's Contacts app. The URI
// must be created with getLookupUri().
cursor?.use {
  if (it.moveToFirst() == true) {
    val uri = ContactsContract.Contacts.getLookupUri(it.getLong(0), it.getString(1))
    ContactsContract.QuickContact.showQuickContact(
      activity,
      Rect(20, 20, 100, 100),
      uri,
      ContactsContract.QuickContact.MODE_LARGE,
      null
    )
  }
}

Java

// Query the content provider using the ENTERPRISE_CONTENT_FILTER_URI address.
// We use the _ID and LOOKUP_KEY columns to generate a work-profile URI.
Cursor cursor = getContentResolver().query(
    contentFilterUri,
    new String[] {
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.LOOKUP_KEY,
    },
    null,
    null,
    null);
if (cursor == null) {
  return;
}

// Show the contact details card in the work profile's Contacts app. The URI
// must be created with getLookupUri().
try {
  if (cursor.moveToFirst() == true) {
    Uri uri = ContactsContract.Contacts.getLookupUri(
        cursor.getLong(0), cursor.getString(1));
    ContactsContract.QuickContact.showQuickContact(
        getActivity(),
        new Rect(20, 20, 100, 100),
        uri,
        ContactsContract.QuickContact.MODE_LARGE,
        null);
  }
} finally {
  cursor.close();
}

أماكن التوفّر

يلخص الجدول التالي إصدارات Android التي تدعم بيانات جهات اتصال الملف الشخصي للعمل في الملف الشخصي:

إصدار Android الدعم
5.0 (المستوى 21 من واجهة برمجة التطبيقات) ابحث عن أسماء جهات اتصال العمل لأرقام الهواتف باستخدام PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI.
6.0 (مستوى واجهة برمجة التطبيقات 23) يمكنك البحث عن أسماء جهات اتصال العمل لعناوين البريد الإلكتروني باستخدام Email.ENTERPRISE_CONTENT_LOOKUP_URI.
7.0 (مستوى واجهة برمجة التطبيقات 24) يمكنك طلب البحث عن أسماء جهات اتصال العمل من أدلة العمل باستخدام Contacts.ENTERPRISE_CONTENT_FILTER_URI.
يمكنك إدراج جميع الأدلة في الملفات الشخصية والملفات الشخصية للعمل باستخدام Directory.ENTERPRISE_CONTENT_URI.

التطوير والاختبار

لإنشاء ملف شخصي للعمل، اتّبِع الخطوات التالية:

  1. ثبِّت تطبيق Test DPC (اختبار وحدة التحكّم بسياسة الجهاز).
  2. افتح تطبيق Set up Test DPC (إعداد اختبار وحدة التحكّم بسياسة الجهاز) (وليس رمز تطبيق Test DPC).
  3. اتّبِع التعليمات الظاهرة على الشاشة لإعداد ملف شخصي مُدار.
  4. في الملف الشخصي للعمل، افتح تطبيق جهات الاتصال وأضِف بعض نماذج جهات الاتصال.

لمحاكاة مشرف تكنولوجيا المعلومات الذي يحظر الوصول إلى جهات اتصال الملف الشخصي للعمل، اتّبِع الخطوات التالية:

  1. في الملف الشخصي للعمل، افتح تطبيق اختبار وحدة التحكّم بسياسة الجهاز (DPC).
  2. ابحث عن الإعداد إيقاف البحث عن جهات الاتصال من بين الملفات الشخصية أو الإعداد إيقاف ميزة "إظهار رقم المتّصل بين الملفات الشخصية".
  3. بدِّل الإعداد إلى تفعيل.

لمعرفة المزيد من المعلومات حول اختبار تطبيقك باستخدام الملفات الشخصية للعمل، يُرجى الاطّلاع على اختبار التطبيق للتوافق مع الملفات الشخصية للعمل.

مراجع إضافية

لمزيد من المعلومات عن جهات الاتصال أو الملف الشخصي للعمل، اطّلِع على هذه المراجع: