دعم عمليات الضبط المُدارة

تشتمل بعض التطبيقات المصمّمة للمؤسسات على إعدادات مدمجة تسمى عمليات الضبط المُدارة، والتي يمكن لمشرفي تكنولوجيا المعلومات ضبطها عن بُعد. على سبيل المثال، قد يتضمن أحد التطبيقات خيار مزامنة البيانات فقط عند اتصال الجهاز بشبكة Wi-Fi. إنّ تزويد مشرفي تكنولوجيا المعلومات بإمكانية تحديد عمليات الضبط المُدارة وتطبيقها على الأجهزة هو أحد متطلبات جميع مجموعات الحلول. هناك طريقتان يمكنك من خلالهما دعم عمليات الضبط المُدارة في وحدة تحكُّم إدارة الخدمات الجوّالة للمؤسسات (EMM):

  • أنشئ واجهة المستخدم الخاصة بك وطبِّق الإعدادات من خلال managedConfiguration في ApplicationPolicy.
  • أضِف إطار iframe لعمليات الضبط المُدارة إلى وحدة التحكُّم (التعليمات الموضّحة أدناه) وطبِّق الإعدادات من خلال managedConfigurationTemplate في ApplicationPolicy


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

الإجراءات المتاحة لمشرفي تكنولوجيا المعلومات من إطار iframe

إطار iframe في "mcm"
الشكل 1. مثال على إطار iframe لعمليات الضبط المُدارة لـ Gmail.

ضبط الملفات الشخصية للإعداد وحفظها

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

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

يستطيع إطار iframe عرض ملفات التهيئة المحفوظة. يمكن لمشرفي تكنولوجيا المعلومات تعديل الإعدادات داخل الملف الشخصي وحفظ التغييرات.

حذف الملفات الشخصية للإعدادات

يمكن لمشرفي تكنولوجيا المعلومات حذف الملفات الشخصية للإعدادات من إطار iframe. هذه الميزة معطلة بشكل افتراضي.

إضافة إطار iframe إلى وحدة التحكم

إنشاء رمز مميّز للويب

يمكنك استخدام enterprises.webTokens.create لإنشاء رمز ويب مميَّز يحدد هوية المؤسسة، وضبط iframeFeature على MANAGED_CONFIGURATIONS. يجب عليك تضمين الرمز المميز المعروض، مع معلمات أخرى، عند عرض إطار iframe في وحدة التحكم لديك.

عرض إطار iframe

في ما يلي مثال على كيفية عرض إطار iframe لعمليات الضبط المُدارة:

<script src="https://apis.google.com/js/api.js"></script>
<div id="container" style="width: 1000px; height: 1000px"></div>
<script>
  gapi.load('gapi.iframes', function() {
    var options = {
      'url': 'https://play.google.com/managed/mcm?token=web_token&packageName=app_package_name',
      'where': document.getElementById('container'),
      'attributes': { style: 'height:1000px', scrolling: 'yes'}
    }

    var iframe = gapi.iframes.getContext().openChild(options);
  });
</script>

معلمات عنوان URL

يسرد الجدول أدناه جميع المعلمات المتاحة لعنوان URL لإطار iframe.

المَعلمةمطلوبةالوصف
token نعم الرمز المميّز الذي تم عرضه من "Enterprises.createWebToken"
packageName نعم معرِّف المنتج للتطبيق. على سبيل المثال، com.google.android.gm.
mcmId لا رقم تعريف ملف شخصي مُدار لعمليات الضبط.
canDelete لا إذا كانت القيمة TRUE، يؤدي ذلك إلى تفعيل زر في إطار iframe يسمح لمشرفي تكنولوجيا المعلومات بحذف الملف الشخصي لعمليات الضبط المُدارة. وإذا كانت FALSE (القيمة التلقائية)، يكون الزر غير مفعَّل.
locale لا تمثّل هذه السمة علامة لغة BCP 47 صحيحة وتُستخدَم لترجمة المحتوى في إطار iframe. إذا لم يتم تحديد القيمة، ستكون القيمة التلقائية en_US.

أحداث Iframe

يجب أيضًا معالجة الأحداث التالية كجزء من عملية الدمج.

حدثالوصف
onconfigupdated يحدّث المستخدم ملفًا شخصيًا حاليًا لعمليات الضبط المُدارة أو ينشئ ملفًا شخصيًا جديدًا. ويؤدي ذلك إلى عرض كائن يحتوي على:
{
  "mcmId": The ID of the managed configurations profile.
  "name": The name of the updated or newly created managed configurations profile.
}
onconfigdeleted يحذف المستخدم ملفًا شخصيًا حاليًا لعمليات الضبط المُدارة. ويؤدي ذلك إلى عرض كائن يحتوي على:
{
  "mcmId": The ID of the managed configurations profile.
}
.

يعرض النموذج أدناه كيفية الاستماع إلى صوت onconfigupdated، كمثال:

iframe.register('onconfigupdated', function(event) {
  console.log(event);
}, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);

تعديلات على مخطط عمليات الضبط المُدارة لأحد التطبيقات

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

تطبيق الملفات الشخصية للإعدادات على السياسة

يتم حفظ كل ملف شخصي للإعدادات بتنسيق mcmId فريد. لتطبيق ملف شخصي للإعدادات على سياسة، حدِّد mcmId في managedConfigurationTemplate.


فهم سلوك الاختيار أو إلغاء الاختيار

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

يوضّح القسم أدناه كيفية عمل إطار iframe لعمليات الضبط المُدارة مع نمط إلغاء الاختيار الجديد هذا وما يمكن لمطوّري البرامج توقُّع أن يتم إرساله كجزء من عملية الضبط المُدارة.

استخدام القيمة التلقائية لأحد قيود التطبيق

في حال كانت قيود التطبيق من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة بقيمة تلقائية، سيتم تطبيق القيمة التلقائية كقيمة القيد على التطبيق عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات على قيود التطبيق هذه.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "defaultValue": {
        "type": "bool",
        "valueBool": false
    }
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "value": {
        "type": "bool",
        "valueBool": false
    }
}]

بدون استخدام القيم التلقائية لقيود التطبيق

في حال عدم توفير قيمة تلقائية لقيود التطبيق من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة .لن يتم تضمين قيود التطبيق هذه عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات على قيود التطبيق هذه.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool"
    // defaultValue absent.
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]

استخدام الحزم داخل المخطط

ينطبق هذا القسم على قيود الحزم للتطبيقات:

وجود قيد تطبيق فرعي واحد على الأقل مع قيمة تلقائية في قيد تطبيق على الحِزمة

إذا ضمن القيد ضمن حزمة تطبيق واحد على الأقل من قيود التطبيق الفرعي من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة بقيمة تلقائية، سيتم تطبيق القيمة التلقائية عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات عليها.

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            "defaultValue": {
                "type": "bool",
                "valueBool": false
            }
        },
        {
            "key": "bool_key_2",
            "restrictionType": "bool"
            // defaultValue absent.
        }
    ]
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            "value": {
                "type": "bool",
                "valueBool": false
            }
        },
        // The bool_key_2 child app restriction is not included.
    ]
}]

جميع قيود التطبيقات الفرعية بدون القيَم التلقائية

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

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            // defaultValue absent.
        },
        {
            "key": "bool_key_2",
            "restrictionType": "bool"
            // defaultValue absent.
        }
    ]
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]

استخدام bundle_array ضمن المخطط

ينطبق هذا القسم على قيود تطبيقات bundle_array. ليست ذات صلة إذا كانت قيود التطبيقات الفرعية ذات النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة تحتوي على قيم تلقائية.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "defaultValue": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

تحتوي على مجموعة حِزمة واحدة على الأقل في قيد التطبيق bundle_array.

في حال ضبط مجموعة واحدة على الأقل، سيتم تضمين قيد التطبيق bundle_array عندما يحفظ المشرفون الإعدادات المُدارة.

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "value": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

إذا تم حفظ مجموعة حِزم أو قيد واحدة، سيتم ضبط جميع القيود/الحِزم ضمن نطاق bundle_array بالكامل حسب الأولوية التالية:

  • القيمة التي اختارها المشرف
  • القيمة التلقائية المُدرجة لهذه الحزمة/القيد.
  • القيمة المعروضة في iframe إذا لم تكن هناك قيمة افتراضية

لا تتوفّر مجموعات حِزم في قيد التطبيق bundle_array.

لن يتم تضمين قيد التطبيق bundle_array عندما يحفظ المشرفون الإعدادات المُدارة بدون إضافة مجموعة مجموعة. سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]