الملفات الشخصية للعمل

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

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

نظرة عامة

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

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

إذا كان الجهاز يحتوي على ملف شخصي للعمل، هناك تأثيرات على التطبيقات. قيد التشغيل على الجهاز، بغض النظر عن الملف الشخصي الذي يعمل عليه التطبيق:

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

منع الأهداف غير الناجحة

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

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

قبل أن يبدأ التطبيق أي نشاط، عليك التحقُّق من توفُّر الحل المناسب. إِنْتَ يمكنك التحقّق من توفُّر حلّ مقبول من خلال الاتصال بالرقم Intent.resolveActivity(). إذا لم تكن هناك لحل الغرض، تُرجع الطريقة null إذا كانت الطريقة تقوم بإرجاع قيمة غير خالية، فهناك طريقة واحدة على الأقل وحل النية، ومن الآمن إطلاق النية. في هذه الحالة، يمكن أن تكون النية قابلة للحل إما بسبب وجود معالج في الملف الشخصي الحالي، أو لأن الغرض يُسمح لهم بالانتقال إلى معالج على الملف الشخصي الآخر. (لمزيد من المعلومات حول أغراض حلّ المشاكل، راجِع الأهداف المشترَكة).

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

Kotlin

fun startTimer(message: String, seconds: Int) {

    // Build the "set timer" intent
    val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(packageManager) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent)

    }
}

Java

public void startTimer(String message, int seconds) {

    // Build the "set timer" intent
    Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(getPackageManager()) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent);

    }
}

مشاركة الملفات بين الملفات الشخصية

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

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

بدلاً من ذلك، عليك مشاركة الملفات باستخدام معرّفات الموارد المنتظمة (URI) للمحتوى. معرّفات الموارد المنتظمة (URI) للمحتوى على التعرف على الملف بطريقة أكثر أمانًا وقابلة للمشاركة. يحتوي معرف الموارد المنتظم (URI) للمحتوى على مسار الملف، ولكن أيضًا المرجع الذي يقدم الملف ورقم معرف لتحديد الملف. يمكنك إنشاء Content ID لأي ملف باستخدام FileProvider يمكنك بعد ذلك مشاركة ذلك المحتوى المعرِّف من خلال التطبيقات الأخرى (حتى على الملف الشخصي الآخر) يمكن للمستلم استخدام Content ID للحصول على إمكانية الوصول إلى الملف الفعلي.

على سبيل المثال، إليك كيفية الحصول على معرّف الموارد المنتظم (URI) للمحتوى لملف معيّن. عنوان URI:

Kotlin

// Open File object from its file URI
val fileToShare = File(fileUriToShare)

val contentUriToShare: Uri = FileProvider.getUriForFile(
        context,
        "com.example.myapp.fileprovider",
        fileToShare
)

Java

// Open File object from its file URI
File fileToShare = new File(fileUriToShare);

Uri contentUriToShare = FileProvider.getUriForFile(getContext(),
        "com.example.myapp.fileprovider", fileToShare);

عند استدعاء طريقة getUriForFile()، يجب عليك تضمين مرجع موفر الملف (في هذا المثال، "com.example.myapp.fileprovider") المحددة في <provider> في بيان التطبيق. لمزيد من المعلومات حول مشاركة الملفات باستخدام معرفات الموارد المنتظمة (URI) للمحتوى، راجع المشاركة الملفات.

الاستماع إلى الإشعارات

يوفر التطبيق عادةً فئة فرعية واحدة (NotificationListenerService) إلى تلقي معاودة الاتصال من النظام بشأن التغييرات على الإشعارات. الأجهزة المزوّدة قد تؤثر ملفات العمل في طريقة عمل "NotificationListenerService". مع تطبيقك.

في ملف العمل

لا يمكنك استخدام "NotificationListenerService" من أحد التطبيقات. قيد التشغيل في ملف العمل. عند تشغيل تطبيقك في ملف شخصي للعمل، نظام يتجاهل NotificationListenerService لتطبيقك. ومع ذلك، التطبيقات التي تعمل في الملف الشخصي يمكنها الاستماع إلى الإشعارات.

في الملف الشخصي

عند تشغيل تطبيقك في الملف الشخصي، قد لا تتلقّى إشعارات. للتطبيقات التي تعمل في ملف العمل. بشكلٍ تلقائي، جميع تطبيقات الملف الشخصي تلقّي معاودة الاتصال، ولكن بإمكان مشرف تكنولوجيا المعلومات إضافة ملف شخصي واحد أو أكثر إلى القائمة المسموح بها التطبيقات التي تسمح لهم بالاستماع إلى التغييرات في الإشعارات. بعد ذلك يحظر النظام التطبيقات غير المدرَجة في القائمة المسموح بها. سياسة جهاز في نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث وحدة تحكُّم (DPC) تدير ملف العمل قد تمنع تطبيقك من الاستماع إلى إشعارات ملف العمل باستخدام DevicePolicyManager طريقة واحدة setPermittedCrossProfileNotificationListeners() لا يزال تطبيقك يتلقّى عمليات معاودة الاتصال بشأن الإشعارات التي يتم نشرها في الملف الشخصي. بك.

اختبار تطبيقك للتأكُّد من توافقه مع ملفات العمل

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

لقد قدّمنا نموذجًا للتطبيق، وهو TestDPC، الذي يمكنك استخدامه لإعداد ملف شخصي للعمل على جهاز Android يعمل Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث يوفّر لك هذا التطبيق طريقة بسيطة لاختبار تطبيقك في بيئة ملف العمل. يمكنك أيضًا استخدام هذا التطبيق لإجراء ما يلي: اضبط ملف العمل على النحو التالي:

  • تحديد التطبيقات التلقائية المتوفّرة في حساب Google Workspace الملف الشخصي
  • يمكنك ضبط الأهداف المسموح لها بالانتقال من ملف شخصي إلى الآخر

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

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

الاختبار على ملفات العمل: النصائح والتلميحات

هناك بعض الحيل التي قد تجدها مفيدة عند إجراء اختبار جهاز ملف العمل.

  • وكما هو موضح، عند التحميل الجانبي لتطبيق على جهاز ملف العمل، يكون مثبتة على كلا الملفين الشخصيين. يمكنك، إن أردت، حذف التطبيق من ملف شخصي واحد. ونتركه على الآخر.
  • معظم أوامر مدير النشاط المتوفرة في واجهة أوامر Android Debug Bridge (adb) تدعم العلامة --user، التي تتيح لك تحديد المستخدم الذي سيتم تشغيله كـ. من خلال تحديد مستخدم، يمكنك اختيار ما إذا كنت تريد تشغيله كمستخدم أساسي غير مُدار. أو ملف العمل. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة ADB أوامر واجهة الأوامر:
  • للعثور على المستخدمين النشطين على أحد الأجهزة، استخدم مدير حزم adb الأمر list users. الرقم الأول في سلسلة الإخراج هو رقم تعريف المستخدم، الذي يمكنك استخدامه مع علامة --user. لمزيد من المعلومات، المعلومات، يُرجى مراجعة ADB Shell الأوامر:

على سبيل المثال، للبحث عن المستخدمين على أحد الأجهزة، يمكنك تشغيل الأمر التالي:

$ adb shell pm list users
UserInfo{0:Drew:13} running
UserInfo{10:Work profile:30} running

في هذه الحالة، يكون المستخدم الأساسي ("Drew") لديه معرّف المستخدم 0، ملف العمل له معرف المستخدم 10. لتشغيل تطبيق في ملف العمل، يمكنك أمرًا مثل هذا:

$ adb shell am start --user 10 \
-n "com.example.myapp/com.example.myapp.testactivity" \
-a android.intent.action.MAIN -c android.intent.category.LAUNCHER