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

تتضمّن بعض التطبيقات المصمّمة للمؤسسات إعدادات مدمَجة تُسمّى عمليات الضبط المُدارة والتي يمكن لمشرفي تكنولوجيا المعلومات ضبطها عن بُعد. على سبيل المثال، قد يتضمن التطبيق خيار مزامنة البيانات فقط عند اتصال الجهاز بشبكة 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
            }
        }]
    }]
}]

توفُّر مجموعة حِزم واحدة على الأقل في قيد التطبيق package_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
]